假设我有一个枚举 http://msdn.microsoft.com/en-us/library/system.windows.forms.dialogresult.aspx:
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
不指示编译器创建一组标志。
- 在一种情况下,该类型应该只允许one value (
DialogResult
)
- 在另一种情况下,类型应该允许以上的多个值(
DialogResults
)
我怎样才能拥有一个"set"枚举类型?
Note:我认为这在 C# 中是不可能的。如果这就是答案:可以这么说 - 问题已得到解答。
Note:仅仅因为我相信 C# 语言没有该功能并不意味着它没有该功能 - 我可能只是还没有找到它。
Update:另一个例子:
假设我有一个枚举:
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 }
问题是它不是真正的代码。
我怎样才能拥有一个"set"枚举类型?