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.