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

Место общения программистов C#
Ответить
Anonymous
 C# преобразование общего перечисления в int без бокса?

Сообщение Anonymous »

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

Смотрите этот пример кода. Это приведет к ненужной упаковке/распаковке значения.

Код: Выделить всё

private int Foo(TEnum value)
where TEnum : struct  // C# does not allow enum constraint
{
return (int) (ValueType) value;
}
Вышеупомянутый C# скомпилирован в режиме выпуска со следующим IL (коды операций упаковки и распаковки примечаний):

Код: Выделить всё

.method public hidebysig instance int32  Foo(!!TEnum 'value') cil managed
{
.maxstack  8
IL_0000:  ldarg.1
IL_0001:  box        !!TEnum
IL_0006:  unbox.any  [mscorlib]System.Int32
IL_000b:  ret
}
Преобразование перечислений широко рассматривалось в SO, но мне не удалось найти обсуждение этого конкретного случая.

Подробнее здесь: https://stackoverflow.com/questions/118 ... num-to-int
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»