Преобразование времени компиляции uint в int в C#

У меня есть подобное перечисление в старом коде:

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

Однако я не уверен, что могу полагаться на то, что это не вызовет арифметических исключений или не будет правильно обрабатываться при чтении или записи на диск. Могу ли я полагаться на битовый формат, соответствующий формату, который он использовал, когда перечисление поддерживалось беззнаковым целым числом?

5
задан Billy ONeal 8 August 2012 в 21:53
поделиться