2012-02-28 6 views
-1

나는 두 가지 클래스의 부분 목록을 가지고 있습니다. 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