- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我 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/
我是一名优秀的程序员,十分优秀!