可以防止意外的位操作符在非位掩码字段

本文关键字:掩码 字段 操作符 位操作 意外 | 更新日期: 2023-09-27 18:09:53

在c#中,建议将[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]属性,或其他一些方法,将其转换为编译时错误/警告。我不知道从哪里开始,但看起来应该是可行的,所以任何帮助都会很感激。

可以防止意外的位操作符在非位掩码字段

对于这种"自定义"检查,如果编译器无法找出问题,请使用http://research.microsoft.com/en-us/projects/contracts/。