Mam enum jak to w starym kawałku kodu:kompilacji Konwersja uint do int w C#
[Flags]
public enum Example: uint
{
Foo = 0x00000001,
Bar = 0xC0000000
}
Teraz FxCop is complaining o tym wyliczenia stosując uint zamiast int jak to cofając pole. (I zostałem zlecony, aby ten kod był jak najbardziej czysty FxCop ...) Ale istnieje istniejąca wartość wyliczeniowa, która wykorzystuje bit wyższego rzędu enum, i nie mogę tego zmienić, ponieważ został utrwalony format na dysku. Kiedy próbuję skompilować tego, # kompilator C słusznie narzeka:
error CS0266: Cannot implicitly convert type 'uint' to 'int'. An explicit conversion exists (are you missing a cast?)
Tak, miałem zamiar zmienić go na to zamiast:
[Flags]
public enum Example
{
Foo = 0x00000001,
Bar = (int)0xC0000000
}
Jednak nie jestem przekonany, że mogę polegać na tym nie rzuca arytmetycznych wyjątków lub nie jest obsługiwany poprawnie podczas odczytu lub zapisu na dysku. Czy mogę polegać na formacie bitowym dopasowanym do formatu używanego, gdy enum jest wspierane przez unsigned int?
To może nie rozwiązać wszystkich problemów z FxCop. Nie zdziwiłbym się, gdyby powiedział ci, że powinieneś mieć członka "None" dla wszystkich "[Flags"] wyrażeń. Wydaje się to być bardzo dobrym miejscem do wstawiania ukrytych ostrzeżeń z komentarzem, dlaczego nie możesz zmienić kodu. –
@Cody: Tak, może to skończyć. –