gpt4 book ai didi

c# - 如何在 DynamicMethod Emit 中表示 typeof(Int32&) 类型

转载 作者:太空宇宙 更新时间:2023-11-03 19:47:09 24 4
gpt4 key购买 nike

我有以下代码:

    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));
}

运行后出现如下错误:

因为它的签名或安全透明性与委托(delegate)类型的签名或安全透明性不兼容。

以下正常工作:

  static RefAction CreateRefGenerator(){
Type[] types = { typeof(Int32).MakeByRefType() };
...
}

最佳答案

您必须使用 Type.MakeByRefType method创建您的 ref 类型。

Returns a Type object that represents the current type when passed as a ref parameter


您的 il 代码中也可能存在错误:Afaik 动态方法始终是静态的,因此可以在索引零而不是索引处找到第一个显式参数。

关于c# - 如何在 DynamicMethod Emit 中表示 typeof(Int32&) 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43990977/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com