可以防止非位掩码字段上的意外按位运算符?

时间:2011-09-28 18:04:47

标签: c# enums bit-manipulation bitmask

在C#中你要recommended将[Flags]属性添加到位掩码枚举中,如下所示:

[Flags]
public enum Condiments
{
    None = 0,
    Ketchup = 1,
    Mustard = 2,
    Mayo = 4,
    Pickle = 8,
    AllTheWay = 15
}

我发现我的代码错误地在枚举上执行按位运算,而没有[Flags]属性根本不是位掩码(First = 1,Second = 2,Third = 3等)。这当然在逻辑上是错误的,但编译器完全可以接受。

我想知道是否有任何方法可以利用[Flags]属性或其他方法将其转换为编译时错误/警告。我不知道从哪里开始,但似乎它应该是可行的,所以任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

我建议进行这种“自定义”检查,编译器无法使用http://research.microsoft.com/en-us/projects/contracts/找出问题。 CodeContracts,如果可以的话。