C # Non-Boxing-Konvertierung von generischer Aufzählung in int?

Gibt es bei einem generischen Parameter TEnum, der immer ein Aufzählungstyp sein wird, eine Möglichkeit, von TEnum nach int zu konvertieren, ohne zu boxen / zu entboxen?

Siehe diesen Beispielcode. Dadurch wird der Wert unnötigerweise ein- und ausgeblendet.

private int Foo<TEnum>(TEnum value)
    where TEnum : struct  // C# does not allow enum constraint
{
    return (int) (ValueType) value;
}

Das obige C # ist ein Release-Modus, der in die folgende IL kompiliert wurde (Anmerkung Boxing und Unboxing Opcodes):

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

Die Enum-Konvertierung wurde in Bezug auf SO ausführlich behandelt, aber ich konnte keine Diskussion zu diesem speziellen Fall finden.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage