我必须为我声明的每个标志类型构建一个扩展方法,就像这样:
public static EventMessageScope SetFlag(this EventMessageScope flags,
EventMessageScope flag, bool value)
{
if (value)
flags |= flag;
else
flags &= ~flag;
return flags;
}
为什么没有像Enum.HasFlag
这样的Enum.SetFlag
?此外,为什么这种方法不总是起作用?
public static bool Get(this EventMessageScope flags, EventMessageScope flag)
{
return ((flags & flag) != 0);
}
例如,如果我有:
var flag = EventMessageScope.Private;
并且像这样进行检查:
if(flag.Get(EventMessageScope.Public))
当 EventMessageScope.Public
实际上是 EventMessageScope.Private | EventMessageScope.PublicOnly
时,它返回 true。
当它不是这样的时候,因为Private
不是公共的,那么它只是半公共的。
对于以下情况也是一样的:
if(flag.Get(EventMessageScope.None))
它会返回 false
,除非作用域实际上是 None
(0x0
),但这个情况应该总是返回 true 吗?
AddOneToInteger
方法。 - Juan