C#链接List的元素

时间:2017-03-04 21:20:11

标签: c#

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

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地址(List更新为w / new)时,条目中的值不会改变 - 我必须为每个条目做一个foreach(不错,但是......)

相反,我正在寻找解决方案,将特定的List-element“链接”到local_inter参数 - 因此更改List中的IP将导致每个包含旧的条目的自动更新。

1 个答案:

答案 0 :(得分: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列表,这些IP列表将通知其更改(类似于ObesrvableCollection)并更新集合中更改的字段。