假设我有一个枚举:
namespace System.Windows.Forms
{
public enum DialogResult { None, OK, Cancel, Abort, Retry, Ignore, Yes, No }
}
我想声明一个由这些枚举类型组成的“set”
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
)
我该如何拥有一个枚举类型的"集合"呢?
注意:我认为 C# 不支持此功能。如果确实如此,请直说,我的问题已得到解答。
注意:我认为 C# 语言不支持该功能,并不意味着它不支持该功能——我可能只是还没有找到它。
更新:另一个示例:
假设我有一个枚举:
public enum PatronTier
{
Gold = 1,
Platinum = 2,
Diamond = 3,
SevenStar = 7 //Yes, seven
}
我想声明一个由这些枚举类型组成的"set"。
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 }
问题在于它不是真正的代码。
我如何拥有一个枚举类型的“集合”?
HashSet<PatronTiers>
有问题吗? - John Saunders