- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个将构造函数包装在动态工厂方法中的方法:
static Func<TArg1, TResult> ToFactoryMethod<TArg1, TResult>(this ConstructorInfo ctor)
where TResult : class
{
var factoryMethod = new DynamicMethod(
name: string.Format("_{0:N}", Guid.NewGuid()),
returnType: typeof(TResult),
parameterTypes: new Type[] { typeof(TArg1) });
ILGenerator il = factoryMethod.GetILGenerator();
il.Emit(OpCodes.Ldarg_1);
il.Emit(OpCodes.Newobj, ctor);
il.Emit(OpCodes.Ret);
return (Func<TArg1, TResult>)
factoryMethod.CreateDelegate(typeof(Func<TArg1, TResult>));
}
但是,下面的代码抛出一个 VerificationException
在 .Invoke(…)
上:
ConstructorInfo ctor = typeof(Uri).GetConstructor(new Type[] { typeof(string) });
Func<string, Uri> uriFactory = ctor.ToFactoryMethod<string, Uri>();
Uri uri = uriFactory.Invoke("http://www.example.com");
如果我替换 ldarg.1
则不会抛出异常; newobj <ctor>
与 ldnull
,所以问题一定是这两条IL指令引起的。进一步的实验表明错误在于 ldarg.1
. (对于上面的具体示例,我已将其替换为 ldstr <string>
。)
有人看出这些 IL 指令有什么问题吗?
最佳答案
此方法是静态的,因此它没有作为 arg0
的 this
参数。通过 il.Emit(OpCodes.Ldarg_1); 更改
对我来说效果很好。il.Emit(OpCodes.Ldarg_1);
;
关于c# - 为什么这个 DynamicMethod (ldarg.1, newobj, ret) 会触发 VerificationException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12041490/
使用 c#, ,Net framework 4.5 记事本 尝试理解 CIL (IL) 语言的原理。目前创建2个简单的方法 public static Int32 Add(Int32 a, Int3
我想调用一个函数,参数为 string和一个 Int32 . string只是一个文字,Int32应该是 field .所以我认为它应该是这样的: .method public hidebysig i
我在 C# 中有一个访问只读字段的简单方法: IL_0024: ldarg.0 IL_0025: ldfld string MyAssembly.MyClass.TestClass::A
这是c#代码 class SimpleIL { private int f = 2; public void M1() { M2(f); } publi
我有一个将构造函数包装在动态工厂方法中的方法: static Func ToFactoryMethod(this ConstructorInfo ctor) where TResult : c
我是一名优秀的程序员,十分优秀!