小编Jef*_*arp的帖子

C#非通用枚举的非拳击转换为int?

给定一个通用参数TEnum,它总是一个枚举类型,有没有办法从TEnum转换为int而不用装箱/拆箱?

请参阅此示例代码.这将不必要地装箱/取消装箱.

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

上面的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
}
Run Code Online (Sandbox Code Playgroud)

枚举转换已在SO上得到广泛处理,但我无法找到解决此特定案例的讨论.

.net c# enums boxing

62
推荐指数
3
解决办法
2万
查看次数

标签 统计

.net ×1

boxing ×1

c# ×1

enums ×1