2011-01-13 47 views
2

我正在處理某些事情,我需要返回一個枚舉和一個整數數組。我可以繞過整個問題,使用int而不是枚舉,並將它作爲數組的第一個元素添加,但枚舉確實有助於我的代碼易讀性。有什麼辦法可以同時返回嗎?C#返回一個枚舉和一個int數組

+1

答案給出了合理的選擇,但我不能不認爲有更大的設計問題在這裏解決。你能描述一下這個方法在做什麼,它返回一個可變的整數集合和一個枚舉類型? – 2011-01-13 00:47:38

回答

11

有3種常見的解決方案。 哪一個是合適的,將取決於具體情況和個人喜好:

  1. 使用的out參數其中之一。這不需要任何新的類型,但不方便打電話。此外,它可能不會在語義上捕獲返回值之間的關係。

    public int[] MyMethod(out MyEnumType myEnum) 
    { 
        myEnum = ... 
        int[] nums = ...  
        return nums; 
    } 
    
  2. 使用Tuple<,>類型(.NET 4.0)。這隻需要從現有BCL類型構造一個封閉的通用類型,但呼叫者可能不喜歡封裝屬性具有無意義名稱的事實:Item1Item2您也可以使用KeyValuePair<,>類型或編寫自己的Pair<,>類型來服務類似的目的。

    public Tuple<int[], MyEnumType> MyMethod() 
    { 
        int[] nums = ... 
        MyEnumType myEnum = ... 
        return Tuple.Create(nums, myEnum); 
    } 
    
  3. 編寫封裝int數組和枚舉的包裝類。更多的工作,但最好與來電者一起工作。

    public class Wrapper 
    { 
        public int[] Nums { get { ... } } 
        public MyEnumType MyEnum { get { ... } } 
    } 
    ... 
    public Wrapper MyMethod() 
    { 
        Wrapper wrapper = ... 
        return wrapper; 
    } 
    
+0

我想過使用包裝類。不知道C#有元組,所以我想這是要走的路。你知道是否有任何性能影響堅持int使用元組? – user472875 2011-01-13 00:28:25