2011-01-13 44 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