C# 通过反射产生异常
这不是常见的情况。我试图通过反射调用异常。我有点像: testMethod的类型为MethodBuilderC# 通过反射产生异常,c#,reflection,C#,Reflection,这不是常见的情况。我试图通过反射调用异常。我有点像: testMethod的类型为MethodBuilder testMethod.GetILGenerator().ThrowException(typeof(CustomException)); 我的CustomException没有默认构造函数,因此上面的语句在给出ArgumentException时出错。如果有一个默认构造函数,那么它可以正常工作 有没有一种方法可以在没有默认构造函数的情况下工作?我已经试了两个小时了( 感谢您的帮助 谢谢
testMethod.GetILGenerator().ThrowException(typeof(CustomException));
我的CustomException没有默认构造函数,因此上面的语句在给出ArgumentException时出错。如果有一个默认构造函数,那么它可以正常工作
有没有一种方法可以在没有默认构造函数的情况下工作?我已经试了两个小时了(
感谢您的帮助
谢谢!请参阅:
throweexception
方法基本上可以归结为以下几点
Emit(OpCodes.NewObj, ...);
Emit(OpCodes.Throw);
这里的关键是将第一个Emit
调用替换为创建自定义异常实例所需的一组IL指令。然后添加Emit(opcode.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);
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);