2012-02-28 21 views
-1

私は2つのクラスのこれらの部分的なリストを持っています。 CiscoSwitchオブジェクトは、SwitchConnectionオブジェクトのリストを他のスイッチに保持します。私は、スイッチのリストを歩き回り、共通の接続を持つスイッチをお互いに、または他のスイッチの接続リストにリストされている同じRemoteSwitchNameに戻すコードを書こうとしていますが、リストにない可能性があります。 CiscoSwitches私は協力しています。さらに多くのプログラムロジックアシスタンスが要求されました

たとえば、A、B、Cという3つのCiscoSwitchインスタンスのリストがある場合、AとBは互いに接続されている可能性があります。 BとCは直接接続されていないかもしれませんが、両方ともDに接続されているかもしれません。AはまたDに接続されるかもしれません。私は、各スイッチ接続のRemoteSwitchName属性をリスト内の他のスイッチのswitchNameプロパティ他のスイッチ上の他のSwitchConnectionsのRemoteSwitchNameプロパティ。

可能であれば、多くのforeachループではなく、LINQを使用することをお勧めします。

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>(); 
} 
+3

あなたは私たちに話をし、私たちにいくつかのコードを示しました。実際の質問は何ですか?何を試しましたか? – svick

+0

-1:不明な質問の部分に加えて、質問のタイトルが本当に悪いです。 –

+0

質問は私がしたいことをする方法です。私はそれが私が掲示したもので明らかだったと思った。 「どのようにしてスイッチのリストをトラバースし、スイッチ間の共通の接続を、相互にもリストにもないスイッチに戻すにはどうすればよいですか」という質問の形で再表示されます。私が試したことに関しては、ネストされたforeachループでいくつかの試みを行いましたが、@ radarbobの投稿を読んだ後、クラスにいくつかのメソッドを追加する必要があります。 –

答えて

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

+0

これでどこに行くのか分かるのに数分かかりました。 RemoteSwichNameプロパティは、実際のスイッチオブジェクトへの参照になります。あなたのコードには、SwitchConnectionクラスのプロパティとして "ConnectionSwitch RemoteSwitch"があります。 RemoteSwitchがタイプCiscoSwitchのプロパティまたはSwitchConnectionタイプのプロパティであることを意味しましたか?私はそれがSwitchConnectionであることがより理にかなっていると思います。 –

+0

申し訳ありませんが、私はスイッチと接続を切り替えました。 **私はそれがSwitchConnectionであることがより理にかなっていると思う。** - はい。 – radarbob

関連する問題