gpt4 book ai didi

c# - 如何捕获使用 MethodInfo.Invoke 调用的方法中抛出的异常?

转载 作者:行者123 更新时间:2023-11-30 20:46:14 25 4
gpt4 key购买 nike

我有以下代码:

using System;
using System.Reflection;

namespace TestInvoke
{
class Program
{
static void Main( string[] args )
{
Method1();
Console.WriteLine();
Method2();
}

static void Method1()
{
try
{
MyClass m = new MyClass();
m.MyMethod( -3 );
}
catch ( Exception e )
{
Console.WriteLine( e.Message );
}
}

static void Method2()
{
try
{
string className = "TestInvoke.MyClass";
string methodName = "MyMethod";
Assembly assembly = Assembly.GetEntryAssembly();
object myObject = assembly.CreateInstance( className );
MethodInfo methodInfo = myObject.GetType().GetMethod( methodName );
methodInfo.Invoke( myObject, new object[] { -3 } );
}
catch ( Exception e )
{
Console.WriteLine( e.Message );
}

}
}

public class MyClass
{
public void MyMethod( int x )
{
if ( x < 0 )
throw new ApplicationException( "Invalid argument " + x );

// do something
}

}
}

Method1Method2 都执行MyClass.MyMethod,但是Method1 输出:

Invalid argument -3

方法2输出时:

Exception has been thrown by the target of an invocation.

我们可以修改 Method2 以便它可以捕获 Method1 中的异常吗?

最佳答案

看看 InnerException。在 .NET 中,反射将包装异常 - 这对于了解异常的调用方式很有用。查看内部异常属性有您要查找的异常。 stack trace

因此,要获得相同的异常,只需调用 Console.WriteLine(e.InnerException.Message) 即可。

关于c# - 如何捕获使用 MethodInfo.Invoke 调用的方法中抛出的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27242008/

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