我正在尝试使用应用的 FlagsAttribute 评估枚举,如下所示。问题在于为确保正确的 if 语句运行而采用的代码数量多得离谱。我有四个 if 语句,它们应该只在设置了枚举的特定组合但没有别的时执行:
- 私有(private)的,静态的
- 私有(private)
- 特权
- 公开
检测所需标志的存在很容易,但我还必须确保没有其他标志被设置,这是一个荒谬的代码输入量,看起来像是一场维护噩梦。
[Flags]
public enum AccessModifierType : short
{
Infer = 1,
Public = 2,
Privileged = 4,
Private = 8,
Static = 16
}
任何人都可以重写这个 if 语句以使其更简洁吗?
if ((Model.CurrentContext.CurrentAccessModifierType & AccessModifierType.Public) == AccessModifierType.Public
&& (Model.CurrentContext.CurrentAccessModifierType & AccessModifierType.Static) != AccessModifierType.Static
&& (Model.CurrentContext.CurrentAccessModifierType & AccessModifierType.Privileged) != AccessModifierType.Privileged
&& (Model.CurrentContext.CurrentAccessModifierType & AccessModifierType.Private) != AccessModifierType.Private){
}
最佳答案
目前尚不清楚您的最终样本与您的原始要求有何关系(我觉得 Infer
有一些特殊的含义?)但是如果您正在寻找一个特定的 位组合,仅此而已,为什么不对确切的预期枚举值(通过按位 OR 组装)使用相等性测试?
if(myUnknownFlagsEnumValue == (MyEnum.RequiredFlag1 | MyEnum.RequiredFlag2))
{
...
}
关于c# - 枚举标志属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10395218/