Учитывая общий параметр TEnum, который всегда будет типом перечисления, есть ли способ передать из TEnum в int без бокса /unboxing?
См. этот примерный код. Это приведет к коробке /unbox значение без необходимости.
private int Foo<TEnum>(TEnum value)
where TEnum : struct // C# does not allow enum constraint
{
return (int) (ValueType) value;
}
Вышеуказанный С# - это режим освобождения, скомпилированный для следующих IL (примечание к бокс-боксу и коды для удаления):
.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
}
Преобразование Enum было обработано широко на SO, но я не мог найти дискуссию, рассматривающую этот конкретный случай.