C#返回枚举和int数组

use*_*875 2 c# enums

我正在做一些我需要返回枚举和一系列int的东西.我可以绕过整个问题并使用int而不是枚举并将其添加为数组的第一个元素,但枚举确实有助于我的代码易读性.有没有办法同时返回两个?

Ani*_*Ani 11

有3种常见的解决方案.哪一个适合取决于具体情况和您的个人偏好:

  1. 其中一个out参数使用参数.这不需要任何新类型,但是不方便打电话.此外,它可能不会在语义上捕获返回值之间的关系.

    public int[] MyMethod(out MyEnumType myEnum)
    { 
        myEnum = ...
        int[] nums = ...    
        return nums;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用Tuple<,>类型(.NET 4.0).这只需要从现有BCL型密闭通用型的建设,但来电者可能不喜欢的事实,封装属性有无意义的名称: Item1Item2您还可以在KeyValuePair<,>类型或编写自己的Pair<,>类型服务于类似的目的.

    public Tuple<int[], MyEnumType> MyMethod() 
    {
        int[] nums = ...
        MyEnumType myEnum = ...
        return Tuple.Create(nums, myEnum); 
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 编写一个封装int数组和枚举的包装类.更多的工作,但最好与呼叫者一起工作.

    public class Wrapper
    { 
        public int[] Nums { get { ... } } 
        public MyEnumType MyEnum { get { ... } }
    }
    ...
    public Wrapper MyMethod() 
    { 
        Wrapper wrapper = ...
        return wrapper;
    }
    
    Run Code Online (Sandbox Code Playgroud)

  • @ user472875:如果两者具有逻辑意义,那么Wrapper类就是真正的方法. (3认同)