2011-10-11 2 views
0

트리 목록에서 선택된 노드를 반환하는 GetSelectedServices() 메서드가 있습니다. 동일한 방법으로 선택된 노드와 모든 노드로 반환 할 것을 기대합니다. out 매개 변수를 추가하려고했습니다.'return'과 'out'을 동시에 사용할 수 있습니까?

그러나이 메서드를 호출하면 out 매개 변수를 제공해야하므로 selectedNodes가 반환 된 목록은 마스크 처리됩니다. 따라서이 매개 변수를 가질 수 없습니다.

internal List<__ServiceInfo> GetSelectedServices(out List<__ServiceInfo> lstAll) 
{ 
    List<__ServiceInfo> lstSelected = new List<__ServiceInfo>(); 
    List<__ServiceInfo> lstA = new List<__ServiceInfo>(); 

    foreach (TreeListNode node in this.tlServices.Nodes) 
    { 
     if (node.Checked) 
     { 
      var service = this.tlServices.GetDataRecordByNode(node) as __ServiceInfo; 
      lstA.Add(service); 

      if (service != null) 
      { 
       lstSelected.Add(service); 
      } 

      if (node.Nodes.Count > 0) 
      { 
       foreach (TreeListNode subNode in node.Nodes) 
       { 
        if (subNode.Checked) 
        { 
         service = this.tlServices.GetDataRecordByNode(subNode) as __ServiceInfo; 
         lstA.Add(service); 

         if (service != null) 
         { 
          lstSelected.Add(service); 
         } 
        } 
       } 
      } 
     } 
    } 
    lstAll = lstA; 

    return lstSelected; 
} 

내가

public bool HasValidModel() 
{ 
    List<__ServiceInfo> lstAll = new List<__ServiceInfo>(); 
    //here I get all nodes 
    var allServices = this.GetAllServices(out lstAll); 

    List<__ServiceInfo> lstSelected = new List<__ServiceInfo>(); 
    //but how to get the list from ""return lstSelected""; 
} 

어떤 제안을 주셔서 감사 메소드를 호출하는 방법 나의 방법.

+0

그래서 기본적으로 "all"은 선택한 항목에 모든 항목을 포함하고 'null'항목을 포함하고 있습니까? –

+0

'GetSelectedServices'는 "all"& "selected"에 대해 동일한리스트를 리턴합니다 -'service'는 결코 'null'이 아님을 가정합니다. null이 있으면 결과가 더 이상합니다. – Enigmativity

+6

프로그램이 C# 사양의 2.4.2 절을 위반합니다. ** 프레임 워크 나 컴파일러 구현 팀이 아닌 한 식별자에 두 개의 연속적인 밑줄이있는 프로그램을 작성하는 것은 최악의 습관입니다. ** –

답변

3

을 그냥 두 변수를 사용하여, 다음과 같이 :

List<__ServiceInfo> lst; 
List<__ServiceInfo> lstSelected = GetSelectedServices(out lst); 

'return'ed 개체가 지금 lstSelected에 의해 참조되는 반면, out ed 오브젝트는 lst으로 참조됩니다.

4

불필요하게 변수 중 하나를 초기화하더라도 이미 두 개의 변수가 있습니다. 많은 매개 변수를 사용하여 같은

public bool HasValidModel() 
{ 
    List<__ServiceInfo> lstAll; 
    var selectedServices = this.GetAllServices(out lstAll); 

    // Now use lstAll and selectedServices 
} 

개인적으로 정말하지 않으며, 가능하다면 대안 설계를 찾을 것입니다,하지만 그건 별개의 문제입니다 : 그냥 사용합니다. (나는 그 중 일부를 선택에서 모든 서비스를 찾아 밖으로 분리 것입니다.)

3

returnout 매개 변수를 구현 한 방식은 문제가없는 것처럼 보입니다. 그러나 전화가 잘못되었습니다. @ 켄의 답은 올바른 방향으로 향하고 있습니다.

그러나 GetSelectedServices 방법의 논리는 홀수입니다. "선택된"서비스와 "일반"서비스의 유일한 차이점은 "일반"서비스가 NULL이라는 것입니다. 결과적으로 allServices 목록은 선택된 서비스에 더한 NULL 집합입니다. 제 의견으로는 말이 안됩니다.

관련 문제