2011-10-11 37 views
0

我有一個方法GetSelectedServices(),它返回樹列表中的選定節點, 期望用相同的方法返回所選節點和所有節點,我試圖添加一個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

所以基本上,「全部」包含選中的所有內容,然後是一堆'null'條目? –

+0

看起來'GetSelectedServices'返回的是「all」和「selected」的相同列表 - 假設'service'永遠不是'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參數的方式似乎沒有問題。但電話是錯誤的。 @ Ken的答案指向正確的方向。

然而,GetSelectedServices方法中的邏輯很奇怪。 「選定」服務和「常規」服務之間的唯一區別是「常規」服務是NULL。這導致allServices列表是NULL和所選服務的集合。我認爲這沒有意義。

相關問題