给定一个通用参数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上得到广泛处理,但我无法找到解决此特定案例的讨论.