C# 返回一个 enum 和一个 int 数组

发布于 2024-10-11 21:40:39 字数 96 浏览 1 评论 0原文

我正在做一些需要返回枚举和整数数组的事情。我可以解决整个问题并使用 int 而不是枚举并将其添加为数组的第一个元素,但枚举确实有助于我的代码易读性。有什么办法可以同时返回两者吗?

I'm working on something where I would need to return an enum and an array of ints. I can go around the whole issue and use an int instead of the enum and add it as the first element of the array, but the enum really helps my code legibility. Is there any way to return both at the same time?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

你的往事 2024-10-18 21:40:40

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

  1. 对其中之一使用 out 参数。这不需要任何新类型,但调用不方便。此外,它可能无法在语义上捕获返回值之间的关系。

    public int[] MyMethod(out MyEnumType myEnum)
    { 
        我的枚举 = ...
        int[] 数字 = ...    
        返回数字;
    }
    
  2. 使用元组<,> 类型(.NET 4.0)。这只需要从现有的 BCL 类型构造一个封闭的泛型类型,但调用者可能不喜欢封装的属性具有无意义的名称:Item1Item2还可以使用 KeyValuePair<,> 类型或编写您自己的 Pair<,> 类型来实现类似的目的。

    public Tuple;我的方法() 
    {
        int[] 数字 = ...
        MyEnumType myEnum = ...
        返回 Tuple.Create(nums, myEnum); 
    }
    

  3. 编写一个封装类,封装int数组和enum。更多工作,但对于调用者来说是最好的工作。

    公共类包装器
    { 
        公共 int[] Nums { 获取 { ... } } 
        公共 MyEnumType MyEnum { 获取 { ... } }
    }
    ...
    公共包装 MyMethod() 
    { 
        包装纸=...
        返回包装器;
    }
    

There are 3 common solutions to this.
Which one is appropriate would depend on the specific situation and your personal preference:

  1. Use an out parameter for one of them. This doesn't require any new types, but is inconvenient to call. Additionally, it may not semantically capture the relationship between the returned values.

    public int[] MyMethod(out MyEnumType myEnum)
    { 
        myEnum = ...
        int[] nums = ...    
        return nums;
    }
    
  2. Use the Tuple<,> type (.NET 4.0). This only requires the construction of a closed generic-type from an existing BCL type, but callers may not like the fact that the encapsulated properties have meaningless names: Item1 and Item2 You can also the KeyValuePair<,> type or write your own Pair<,> type to serve a similar purpose.

    public Tuple<int[], MyEnumType> MyMethod() 
    {
        int[] nums = ...
        MyEnumType myEnum = ...
        return Tuple.Create(nums, myEnum); 
    }
    
  3. Write a wrapper class that encapsulates the int array and the enum. More work, but nicest to work with for the caller.

    public class Wrapper
    { 
        public int[] Nums { get { ... } } 
        public MyEnumType MyEnum { get { ... } }
    }
    ...
    public Wrapper MyMethod() 
    { 
        Wrapper wrapper = ...
        return wrapper;
    }
    
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文