作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
MSDN documentation对于 Flag
属性,您应该:
Define enumeration constants in powers of two, that is, 1, 2, 4, 8, and so on. This means the individual flags in combined enumeration constants do not overlap.
...当然,我总是努力记住要这样做。但是,没有任何强制执行,如果您只是以“基本”方式创建枚举,例如...
[Flags]
public enum BrokenEnum
{
None,
FirstOption,
SecondOption,
ThirdOption
}
...它不会按预期运行。为了解决这个问题,我正在寻找某种静态代码分析(如 FxCop ),当我的代码中存在上述枚举时,它可以警告我。我能找到的最接近的此类警告是“CA1008: Enums should have zero value” ' - 这也有助于正确设计标志枚举,但还不够。
在我的代码中查找设计不正确的标志枚举的最佳方法是什么?解决方案的自动化程度越高越好。
最佳答案
有时你想要一个代表多个选项的标志枚举;在这种情况下,这不是错误。这是一个常见的例子:
[Flags]
public enum FilePermissions
{
None = 0,
Read = 1,
Write = 2,
Execute = 4,
ReadWrite = 3, // Read | Write,
ReadWriteExecute = 7 // Read | Write | Execute
}
也许是因为需要支持这些情况,这就是编译器不会导致警告或错误的原因。
关于c# - 标记没有两个值的幂的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7129976/
我是一名优秀的程序员,十分优秀!