问题[Flags] 枚举属性在 C# 中是什么意思? 不问我在问什么,也不回答。如果该问题有这样的答案,请在评论中说明是哪一个(链接),而不是盲目和错误地标记为重复。
MSDN 的HasFlag文档中有此注释:
HasFlag 方法设计为与使用 FlagsAttribute 属性标记的枚举类型一起使用,并可用于确定是否设置了多个位字段。对于未使用 FlagsAttribute 特性标记的枚举类型,请调用 Equals 方法或 CompareTo 方法。
但是我已经对其进行了测试,尽管枚举被标记或没有标记,但该方法运行良好FlagsAttribute。
也许文档上的注释只是试图通过使用属性来强制执行某种*好的做法*(最终根本无关紧要)?
我在这里看了一眼,确实似乎对枚举没有任何限制(它只是一个简单的按位与):
public Boolean HasFlag(Enum flag) {
if (!this.GetType().IsEquivalentTo(flag.GetType())) {
throw new ArgumentException(Environment.GetResourceString("Argument_EnumTypeDoesNotMatch", flag.GetType(), this.GetType()));
}
ulong uFlag = ToUInt64(flag.GetValue());
ulong uThis = ToUInt64(GetValue());
return ((uThis & uFlag) == uFlag);
}