у меня есть следующие коды:Как поймать Исключение, вызванное методом, вызванным с помощью метода MethodInfo.Invoke?
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
}
}
}
method1 и Method2 как выполнить MyClass.MyMethod, но method1 выходы:
Invalid argument -3
в то время как Method2 выходы:
Exception has been thrown by the target of an invocation.
Можем ли мы изменить Method2 поэтому он может поймать исключение как в method1?