2017-03-04 180 views
0

我在想一种创建链接或引用字符串列表的方法。我的情况是,我正在创建ARP表,我需要保存捕获响应消息的接口的IP(作为字符串)。接口的IP地址保存在列表<String>中。C#列表中的链接元素

ARP_Table_entry(System.Net.IPAddress host_ip_addr, System.Net.NetworkInformation.PhysicalAddress host_mac_addr, int position) 
    { 
     this.host_ip_addr = host_ip_addr; 
     this.host_mac_addr = host_mac_addr; 
     this.time = System.DateTime.Now.Ticks/TimeSpan.TicksPerMillisecond; 
     this.local_inter = ??; 
    } 

我不想做什么,是分配local_inter SMT像list.ElementAt(0),因为当我在界面上更改IP地址(表得到更新瓦特/新的),值条目不会改变 - 我必须做foreach每一个条目(不坏,但是...)

而是我正在寻找解决方案,这将“链接”该特定列表元素local_inter参数 - 所以在列表中更改IP将导致每个包含旧的条目的自动更新。

+0

基本上你想要将你的列表元素绑定到你的'local_inter'上? – dbraillon

+0

是的,就是这个想法。 – MMMaroko

回答

0

如果你能控制代码ARP_Table_entry只是让local_inter属性,从那个神秘的列表返回值:

class ARP_Table_entry 
{ 
    List<string> mysteriousList; 
    int pos; 
    public ARP_Table_entry(List<string> mysteriousList, int pos,...) 
    { 
     this.mysteriousList = mysteriousList; 
     this.pos = pos; 
     ... 
    } 

    // TODO: add null check/position verification as needed 
    string local_inter => mysteriousList[pos]; 
    // or {get { return mysteriousList[pos];} for C# 5 and below 
    ... 

您还可以使用Func<string>类型或local_inter如果你想使用的字段出于某种原因:

class ARP_Table_entry 
{ 
    public Func<string> local_inter; 
    ... 

    public ARP_Table_entry(List<string> mysteriousList, int pos,...) 
    { 
     local_inter =() => mysteriousList[pos]; 
     ... 
    } 

请注意,这两种方法都不能保护您完全不用originalMysteriousList = new List<string>()替换列表。

另一种选择是让更复杂的类型存储将通知其更改的IP列表(类似于ObesrvableCollection)并更新集合中的更改字段。