我在一段旧代码中有一个这样的枚举:
[Flags]
public enum Example: uint
{
Foo = 0x00000001,
Bar = 0xC0000000
}
现在,FxCop 抱怨这个枚举使用 uint 而不是 int 作为它的支持字段。(而且我的任务是让这段代码尽可能干净地 FxCop ......)但是有一个现有的枚举值使用枚举的高位,我无法更改它,因为它已被持久化到磁盘格式。当我尝试编译它时,C# 编译器正确地抱怨:
error CS0266: Cannot implicitly convert type 'uint' to 'int'. An explicit conversion exists (are you missing a cast?)
所以,我打算把它改成这样:
[Flags]
public enum Example
{
Foo = 0x00000001,
Bar = (int)0xC0000000
}
但是,我不肯定我可以依靠这个不抛出算术异常,或者在读取或写入磁盘时没有正确处理。我可以依赖这里的位格式匹配枚举由无符号整数支持时使用的格式吗?