gpt4 book ai didi

c# - 如何在 C# 中拥有一组枚举值?

转载 作者:行者123 更新时间:2023-11-30 14:16:01 25 4
gpt4 key购买 nike

假设我 have an enumeration :

namespace System.Windows.Forms
{
public enum DialogResult { None, OK, Cancel, Abort, Retry, Ignore, Yes, No }
}

我想声明一个由这些枚举类型组成的“集合”

ShowForm(Form frm, DialogResults allowedResults)

在其他语言中你会声明:

public DialogResults = set of DialogResult;

然后我可以使用

ShowForm(frm, DialogResult.OK | DialogResult.Retry);

C# 有Flags 的概念,伪代码:

[Flags]
public enum DialogResults { DialogResult.None, DialogResult.OK, DialogResult.Cancel, DialogResult.Abort, DialogResult.Retry, DialogResult.Ignore, DialogResult.Yes, DialogResult.No }

问题在于它不是真正的代码 - Flags 不指示编译器创建一组标志。

  • 在一种情况下,类型应该只允许一个值(DialogResult)
  • 在另一种情况下,该类型应允许上述的多个值 (DialogResults)

我怎样才能拥有枚举类型的“集合”

Note: i assume it's not possible in C#. If that's the answer: it's okay to say so - the question is answered.

Note: Just because i believe C# language doesn't have the feature doesn't mean it doesn't have the feature - i may just not have found it yet.


更新:另一个例子:

假设我有一个枚举:

public enum PatronTier 
{
Gold = 1,
Platinum = 2,
Diamond = 3,
SevenStar = 7 //Yes, seven
}

我想声明一个由这些枚举类型组成的“集合”

public Tournament
{
public PatronTiers EligibleTiers { get; set; }
}

在其他语言中你会声明:

public PatronTiers = set of PatronTier;

然后我可以使用:

tournament.EligibleTiers = PatronTier.Gold | PatronTier.SevenStar;

C# 有Flags 的概念,伪代码:

[Flags]
public enum PatronTiers { PatronTier.Gold, PatronTier.Platinum, PatronTier.Diamond, PatronTier.SevenStar }

问题在于它不是真正的代码。

我怎样才能拥有枚举类型的“集合”

最佳答案

您似乎想要一系列东西。 C# 中有数组类型,但就编译器支持而言,没有什么直接等同于您的示例,最接近的可能是 DialogResults[] , DialogResults 的数组.

尝试提供 HashSet您允许的项目。 HashSet<T>工具 ISet<T> ,并且通常最好针对接口(interface)而不是具体类型工作,尤其是对于方法签名:

ShowForm(Form frm, ISet<DialogResults> allowedResults);

然后你可以使用Contains测试项目:

if (allowedResults.Contains(DialogResults.OK))
{
}

有点无意义的选择:您总是可以实现自己的 Set<Enum>使用 Jon Skeet's Unconstrained Melody 输入从调用者的角度为您提供更好的语法,并更接近您的示例。

关于c# - 如何在 C# 中拥有一组枚举值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8523544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com