假设我有一些这样的对象:
Class NetworkSwitch
{
private String _name;
String name { get {return _name;} set {_name=value;}}
Dictionary<int, VLAN> VLANDict = new Dictionary<int, NetworkSwitch>();
public List<CiscoSwitch> GetAllNeigbors()
{
List<CiscoSwitch> templist = new List<CiscoSwitch>();
foreach (KeyValuePair<int, CiscoVSAN> vlanpair in this.VLANDict)
{
templist.AddRange((vlanpair.Value.NeighborsList.Except(templist, new SwitchByNameComparer())).ToList());
}
return templist;
}
Class VLAN
{
private Int _VLANNum;
Int VLANNum {get {return _VLANNum ;} set {_VLANNum =value;}}
//a neighbor is another switch this switch is connected to in this VLAN
// the neighbor may not have all same VLANs
List<NetworkSwitch> Neighbors = new List<NetworkSwitch>();
}
上面是这样设计的,因为物理连接的两台交换机可能没有分配所有相同的 VLAN。我正在尝试做的是单步执行给定交换机上每个 VLAN 中的邻居列表,如果名称与输入列表中的名称匹配,则更新对另一台交换机的引用。这是我尝试过的,它不会编译。我想知道 LINQ 是否可以以某种方式做到这一点,或者是否有更好的方法。
// intersect is the input list of NetworkSwitch objects
//MyNetworkSwitch is a previously created switch
foreach (NetworkSwitch ns in intersect)
{
foreach (KeyValuePair<int, VLAN> vlanpair in MyNetworSwitch.VLANDict)
{
foreach (CiscoSwitch neighbor in vlanpair.Value.Neighbors)
{ // this is the line that fails - I can't update neighbor as it is part of the foreach
if (ns.name == neighbor.name) { neighbor = ns; }
}
}
}
另一个问题 - 我添加了获取 NetworkSwitch 对象的所有邻居的方法。假设我要获取该列表,然后使用对具有相同名称的交换机的不同实例的引用来更新它,这会更新 VLAN 中 NetworkSwitch 对象的引用吗?