在C#中编译uint到int的时间转换

Bil*_*eal 5 c# clr

我在一段旧代码中得到了这样的枚举:

[Flags]
public enum Example: uint
{    
    Foo = 0x00000001,
    Bar = 0xC0000000
}
Run Code Online (Sandbox Code Playgroud)

现在,FxCop正在抱怨这个enum使用uint而不是int作为它的支持字段.(并且我的任务是尽可能将此代码作为FxCop清理......)但是现有的枚举值使用枚举的高位,我无法改变它,因为它已被持久化磁盘格式.当我尝试编译它时,C#编译器正确地抱怨:

error CS0266: Cannot implicitly convert type 'uint' to 'int'. An explicit conversion exists (are you missing a cast?)
Run Code Online (Sandbox Code Playgroud)

所以,我打算将其更改为:

[Flags]
public enum Example
{    
    Foo = 0x00000001,
    Bar = (int)0xC0000000
}
Run Code Online (Sandbox Code Playgroud)

但是,我并不认为我可以依赖于此而不是抛出算术异常,或者在读取或写入磁盘时没有正确处理.我可以依赖这里的位格式匹配枚举由unsigned int支持时使用的格式吗?

Mon*_*mas 8

在这里使用未经检查的关键字,你就可以了; 持久的位模式将是您所期望的.

[Flags]
public enum Example
{
    Foo = 0x00000001,
    Bar = unchecked((int)0xC0000000);
} 
Run Code Online (Sandbox Code Playgroud)