古いコードに次のような列挙型があります。
[Flags]
public enum Example: uint
{
Foo = 0x00000001,
Bar = 0xC0000000
}
現在、FxCopは、バッキングフィールドとしてintではなくuintを使用してこの列挙型について不平を言っています。(そして、このコードを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によってバックアップされたときに使用された形式と一致するビット形式を信頼できますか?