¿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.

Respuestas a la pregunta(8)

Su respuesta a la pregunta