请求更多程序逻辑辅助

时间:2012-02-28 18:46:27

标签: c#

我有两个类的部分列表。 CiscoSwitch对象维护一个SwitchConnection对象列表到其他交换机。我正在尝试编写将遍历交换机列表并返回具有公共连接的交换机的代码,这些交换机可以相互连接,也可以返回到其他交换机的连接列表中列出的相同RemoteSwitchName,但它可能不在列表中我正在使用的CiscoSwitches。

例如,如果我有一个名为A,B和C的3个CiscoSwitch实例的列表.A和B可能相互连接。 B和C可能没有直接相互连接,但都连接到D.也可能连接到D.我将每个交换机连接的RemoteSwitchName属性与列表中其他交换机的switchName属性进行比较,并将其与其他交换机上其他SwitchConnections的RemoteSwitchName属性。

如果可能的话,我宁愿使用LINQ而不是很多foreach循环。

public CiscoSwitch 
{ 
private string _SwitchName = String.Empty
public string switchName{ get{return _SwitchName;} set{_SwitchName=value;} }        
 ...
public List<SwitchConnection> SwitchConnectionList = new List<SwitchConnection>();
...
 }

public class SwitchConnection
    // a switch connection is a connection to another switch
    // a switch connection can have multiple portchannels 
    // a switch connection can exist across multiple VSANs
{ 
   // the name of this switch
   // not needed, deprecated
  //  private string _LocalSwitchName;
  //  public string LocalSwitchName { get { return _LocalSwitchName; } set { _LocalSwitchName = value; } }

    // the name of the switch at the other end of the link
    private string _RemoteSwitchName;
    public string RemoteSwitchName { get { return _RemoteSwitchName; } set { _RemoteSwitchName = value; } }
    private string _RemoteIPAddress;
    public string RemoteIPAddress { get { return _RemoteIPAddress; } set { _RemoteIPAddress = value; } }
    public Dictionary<int, PortChannel> LocalPortChannelList = new Dictionary<int,PortChannel>();
}

1 个答案:

答案 0 :(得分:0)

我认为,

private string _RemoteSwitchName应该是对实际对象的引用,而不是“断开连接”的交换机名称。然后得到这个名字是这样的:

protected SwitchConnection RemoteSwitch;

this.RemoteSwitch.Name;  //need to add "Name" property to the class, of course.

此引用还允许您轻松遍历连接链。这与您查询集合的想法并不相互排斥。但是,我认为找到这个给定连接的“链”比使用LINQ更容易。

    // in SwitchConnection class
    public List<string> GetAllConnections(List<string> connectionChain) {

    // to start at any given object just pass in a null reference
    if (connectionChain == null) { connectionChain = new List<string>; }

    connectionChain.Add(this.Name);

    if (this.RemoteSwitch !=null) {
       RemoteSwitch.GetAllConnections(connectionChain);
    }

    return connectionChain;
}

如果您认为自己会有很多不同的查询,我认为另外一个类可以让您的CiscoSwitchSwitchConnection类保持清洁。当您学习/试验LINQ时,由于LINQ学习错误,您的“核心课程”不会不断突破。

你会注意到我没有显示任何LINQ 。你必须自己开始。但是start simple and be methodical