如何在 DynamicMethod Emit 中表示 typeof(Int32&) 类型
How to represent typeof(Int32&) type in DynamicMethod Emit
我有以下代码:
delegate void RefAction(ref Int32 i);// use ref keyword
static RefAction CreateRefGenerator(){
// How to represent typeof(Int32&)type in here??
Type[] types ={ typeof(Int32)};
var dm = new DynamicMethod("RefAction"+Guid.NewGuid().ToString(), null, types, true);
var il = dm.GetILGenerator();
il.Emit(OpCodes.Nop);
il.Emit(OpCodes.Ldarg_1);
il.Emit(OpCodes.Ldc_I4_S,10);
il.Emit(OpCodes.Stind_I4);
il.Emit(OpCodes.Ret);
return (RefAction)dm.CreateDelegate(typeof(RefAction));
}
在运行之后,得到如下错误:
因为它的签名或安全透明度与委托类型的签名或安全透明度不兼容。
以下正常工作:
static RefAction CreateRefGenerator(){
Type[] types = { typeof(Int32).MakeByRefType() };
...
}
您必须使用 Type.MakeByRefType
method 来创建您的引用类型。
Returns a Type object that represents the current type when passed as a ref parameter
您的 il 代码中也可能存在错误:Afaik 动态方法始终是静态的,因此第一个显式参数可以在索引 0 而不是 1 处找到。
我有以下代码:
delegate void RefAction(ref Int32 i);// use ref keyword
static RefAction CreateRefGenerator(){
// How to represent typeof(Int32&)type in here??
Type[] types ={ typeof(Int32)};
var dm = new DynamicMethod("RefAction"+Guid.NewGuid().ToString(), null, types, true);
var il = dm.GetILGenerator();
il.Emit(OpCodes.Nop);
il.Emit(OpCodes.Ldarg_1);
il.Emit(OpCodes.Ldc_I4_S,10);
il.Emit(OpCodes.Stind_I4);
il.Emit(OpCodes.Ret);
return (RefAction)dm.CreateDelegate(typeof(RefAction));
}
在运行之后,得到如下错误:
因为它的签名或安全透明度与委托类型的签名或安全透明度不兼容。
以下正常工作:
static RefAction CreateRefGenerator(){
Type[] types = { typeof(Int32).MakeByRefType() };
...
}
您必须使用 Type.MakeByRefType
method 来创建您的引用类型。
Returns a Type object that represents the current type when passed as a ref parameter
您的 il 代码中也可能存在错误:Afaik 动态方法始终是静态的,因此第一个显式参数可以在索引 0 而不是 1 处找到。