Tengo una enumeración de este tipo en una vieja pieza de código:Tiempo de Compilación La conversión de uint a int en C#
[Flags]
public enum Example: uint
{
Foo = 0x00000001,
Bar = 0xC0000000
}
Ahora, FxCop is complaining acerca de esta enumeración utilizando uint en lugar de int, ya que está retrocediendo campo. (Y se me ha encomendado la tarea de hacer que este código sea lo más limpio posible de FxCop ...) Pero existe un valor enum existente que usa el bit de orden alto de la enumeración, y no puedo cambiarlo porque se ha conservado en un formato en disco. Cuando intento compilar esto, el compilador de C# se queja con razón:
error CS0266: Cannot implicitly convert type 'uint' to 'int'. An explicit conversion exists (are you missing a cast?)
Por lo tanto, yo iba a cambiarlo a este lugar:
[Flags]
public enum Example
{
Foo = 0x00000001,
Bar = (int)0xC0000000
}
Sin embargo, no estoy seguro de que puedo confiar en esto no arrojando excepciones aritméticas, o no se manejan correctamente cuando se leen o escriben en el disco. ¿Puedo confiar en el formato de bit aquí que coincide con el formato que usó cuando la enumeración fue respaldada por un int sin firmar?
Esto puede no resolver todos sus problemas FxCop. No me sorprendería si te dijera que debes tener un miembro 'Ninguno' para todas las enumeraciones' [Flags] '. Este parece ser un muy buen lugar para una supresión de advertencia en línea con un comentario sobre por qué no puede cambiar el código. –
@Cody: Sí, podría terminar haciendo eso. –