我正在考虑一种创建链接或引用字符串列表的方法。我的情况是我正在创建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将导致每个包含旧的条目的自动更新。
答案 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
)并更新集合中更改的字段。