给定一个总是为枚举类型的泛型参数 TEnum,有没有办法在不装箱/取消装箱的情况下将 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
}
枚举转换已经在 SO 上得到了广泛的处理,但是我找不到针对这个特定情况的讨论。