首页 新闻 搜索 专区 学院

要怎么修改一处代码,其他就能随之更改。

0
悬赏园豆:50 [已解决问题] 解决于 2015-09-30 16:47
 1 Class EpcDto
 2 {
 3     public ushort AntennaPortNumber { get; set; }
 4 
 5     public string EpcCode { get; set; }
 6 
 7     public string Tid { get; set; }
 8 
 9     public string Rssi { get; set; }
10 }
11 
12 private void ReaderControllerImplerOnReaderTagsHandle(object sender, RfidReaderEventArgs e)
13 {
14 
15     e.EpcDtos.ForEach(epc =>
16     {
17         //if (_epcList.Contains(epc.EpcCode) == false)
18         if (_epcList.Contains(epc.Tid) == false)
19         {
20             if (_readerControllerImpler != null) _readerControllerImpler.Beep();
21             //_epcList.Add(epc.EpcCode);
22             _epcList.Add(epc.Tid);
23         }
24 
25         //_epcTotalList.Add(epc.EpcCode);//已绑定 保存时才增加
26     });
27 
28     this.InvokeIfRequired(() =>
29     {
30         asc1.Value = _epcList.Count;
31         ascLabel1.Text = _epcList.Count.ToString();
32 
33         //gcEpcList.DataSource = _epcList.ConvertAll(x => new EpcDto { EpcCode = x.ToString() }).ToList();
34         gcEpcList.DataSource = _epcList.ConvertAll(x => new EpcDto { Tid = x.ToString() }).ToList();
35 
36     });
37 }

 

如上代码所示,要怎么修改才能适应 只修改一处,EpcCode和Tid就能互换。

gezoo的主页 gezoo | 初学一级 | 园豆:170
提问于:2015-09-28 16:45
< >
分享
最佳答案
0
private void ReaderControllerImplerOnReaderTagsHandle(object sender, RfidReaderEventArgs e)
{
    ReaderControllerImpler(e.EpcDtos, "Tid");//传Tid就是加Tid的. 传EpcCode就是加EpcCode的
}


private void ReaderControllerImpler(List<EpcDto> epcDtos,string propertyName)
{
      epcDtos.ForEach(epc =>
      {
           var prop=epc.GetType().GetProperty(propertyName);
           if (prop != null)
           {
               var value = prop.GetValue(epc);
               if (value != null && _epcList.Contains(value.ToString())==false)
               {
                   if (_readerControllerImpler != null) 
              _readerControllerImpler.Beep();
                   _epcList.Add(value.ToString());
                }
            }
      });
      this.InvokeIfRequired(() =>
      {
         asc1.Value = _epcList.Count;
         ascLabel1.Text = _epcList.Count.ToString();
         var list = new List<EpcDto>();
         _epcList.ForEach(p =>
         {
            var epc = new EpcDto();
            epc.GetType().GetProperty(propertyName).SetValue(epc, p);
            list.Add(epc);
         });

      gcEpcList.DataSource=list;
      });

}

不知道你是不是想要这样子的。。 

收获园豆:40
李丶GuanYao | 小虾三级 |园豆:1228 | 2015-09-28 18:25
其他回答(2)
0

似乎没有什么简单的操作方式。

原始的方法就是先将其中一个修改成其它的名称,比如将EpcCode修改成abc,修改后属性名称会出现一个红色的箭头,点击箭头或直接用快捷键ALT+SHIFT+F10,出现一个下拉的选择,选择其中的将EpcCode重命名为abc,VS会自动将引用该属性的位置修改为abc,剩下的就是将Tid换成EpcCode,再将abc改为Tid,就可以了。

收获园豆:5
I,Robot | 园豆:9461 (大侠五级) | 2015-09-28 17:22

很感谢您的回答,不过我不是需要快速重命名。是希望能在代码设计上有改动。

支持(0) 反对(0) gezoo | 园豆:170 (初学一级) | 2015-09-28 21:44
0

楼上的那种是你想要的吗?添加一个参数,判断一下这个参数的值,if 怎么样,else 怎么样,不就是只修改一处,EpcCode和Tid就能互换,改参数的值就行呗。还是说你要的是不添加别的代码在你现有代码里面改动一下逻辑使之成立?

收获园豆:5
晓菜鸟 | 园豆:2594 (老鸟四级) | 2015-09-29 13:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册