【发布时间】:2011-12-15 16:42:25
【问题描述】:
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)
我怎样才能有一个枚举类型的“set”?
注意:我认为这在 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 }
问题在于它不是真正的代码。
我怎样才能有一个枚举类型的“set”?
【问题讨论】:
-
HashSet<PatronTiers>有问题吗? -
public Boolean MarriageValid哎呀,没碰那个例子。 :P -
您似乎试图在基于 [Flags] 的枚举和枚举类型的数组或列表(例如 List
)之间找到一个区域。 C# 中没有这样的概念,您需要使用某种集合,或者在枚举中使用 [Flags] 属性。 -
你对同性婚姻有什么问题吗?
-
@JeffN825 咬紧牙关,编辑了有问题的东西 :-)