编译UINT的时间转换在C#中为int(Compile Time Conversion of uin

2019-09-21 01:03发布

我有这样一个枚举在旧的代码:

[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
}

但是,我还不能肯定,我可以靠这个不扔算术异常,或正在读取或写入到磁盘时未正确处理。 我可以依靠位格式匹配这里时,枚举是由一个unsigned int支持它使用的格式?

Answer 1:

这里使用关键字选中,你会好起来; 持久保存的位模式将是你所期望的。

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


Answer 2:

托马斯的答案是100%正确的,但我将我的三个美分添加到它:而不是“修复”你的代码已经是正确的,你可以随时剿的FxCop规则的代码的某些部分。

见我如何抑制的FxCop规则“DoNotCatchGeneralExceptionTypes”与SupressMessage? 和它的接受,例如使用的答案。 一切都在代码和.csproj的设定,所以赠送给最终客户时,所有这些supression设置留在代码。



文章来源: Compile Time Conversion of uint to int in C#
标签: c# clr