C # не бокс преобразование родового перечисления в int?

Учитывая универсальный параметр TEnum, который всегда будет типом enum, есть ли способ привести из TEnum к int без упаковки / распаковки?

Смотрите этот пример кода. Это изменит / распакует значение без необходимости.

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

Вышеприведенный C # является релиз-режимом, скомпилированным со следующим 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, но я не смог найти обсуждение этого конкретного случая.

Ответы на вопрос(8)

Ваш ответ на вопрос