¿C # no boxeo conversión de enum genérico a int?
Dado un parámetro genérico TEnum que siempre será un tipo de enumeración, ¿hay alguna forma de pasar de TEnum a int sin boxeo / desempaquetado?
Ver este código de ejemplo. Esto encajonará / desempaquetará el valor innecesariamente.
private int Foo<TEnum>(TEnum value)
where TEnum : struct // C# does not allow enum constraint
{
return (int) (ValueType) value;
}
El C # anterior es un modo de lanzamiento compilado para la siguiente IL (observe los códigos de operación de boxeo y de desempaquetado):
.method public hidebysig instance int32 Foo<valuetype
.ctor ([mscorlib]System.ValueType) TEnum>(!!TEnum 'value') cil managed
{
.maxstack 8
IL_0000: ldarg.1
IL_0001: box !!TEnum
IL_0006: unbox.any [mscorlib]System.Int32
IL_000b: ret
}
La conversión de enumeración se ha tratado ampliamente en SO, pero no pude encontrar una discusión sobre este caso específico.