У меня есть подобное перечисление в старом коде:
[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
}
Однако я не уверен, что могу полагаться на то, что это не вызовет арифметических исключений или не будет правильно обрабатываться при чтении или записи на диск. Могу ли я полагаться на битовый формат, соответствующий формату, который он использовал, когда перечисление поддерживалось беззнаковым целым числом?