gpt4 book ai didi

c# - 通过反射抛出异常

转载 作者:太空狗 更新时间:2023-10-30 00:46:04 25 4
gpt4 key购买 nike

这不是一个常见的场景。我试图通过反射调用异常。我有类似的东西:testMethod 是 MethodBuilder 类型

testMethod.GetILGenerator().ThrowException(typeof(CustomException));

我的 CustomException 没有默认构造函数,因此上面的语句会出错并给出 ArgumentException。如果有默认构造函数,则可以正常工作。

那么有没有办法,这可以在没有默认构造函数的情况下工作?现在已经尝试了2个小时。 :(

感谢任何帮助。

谢谢!

最佳答案

ThrowException 方法本质上归结为以下内容

Emit(OpCodes.NewObj, ...);
Emit(OpCodes.Throw);

这里的关键是用创建自定义异常实例所需的一组 IL 指令替换第一个 Emit 调用。然后添加 Emit(OpCodes.Throw)

例如

class MyException : Exception {
public MyException(int p1) {}
}

var ctor = typeof(MyException).GetConstructor(new Type[] {typeof(int)});
var gen = builder.GetILGenerator();
gen.Emit(OpCodes.Ldc_I4, 42);
gen.Emit(OpCodes.NewObj, ctor);
gen.Emit(OpCodes.Throw);

关于c# - 通过反射抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4229537/

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