gpt4 book ai didi

c# - 为什么通过 method.invoke() 调用方法时自定义异常变为 System.Exception?

转载 作者:太空宇宙 更新时间:2023-11-03 20:28:29 25 4
gpt4 key购买 nike

我编写了一个自定义异常 AbortTestException,它非常简单:

class AbortTestException : Exception
{
public AbortTestException(string message)
: base(message) { }
}

然后我有一个函数会抛出它:

class Foo
{
public void Throws()
{
throw new AbortTestException("hi");
}
}

Throws() 通过方法引用被调用:

class Program
{
static void Main(string[] args)
{
Type myType = (typeof(Foo));
var method = myType.GetMethod("Throws");
try
{
method.Invoke(new Foo(), null);
}
catch (AbortTestException ex)
{
Console.WriteLine("AbortTestException");
}
catch (Exception ex)
{
Console.WriteLine("Exception");
}
}
}

然而,奇怪的事情发生了。即使 Throws 引发 AbortTestException,也会使用 catch(Exception) block (而不是 catch(AbortTestException) block )。我尝试将“throw new AbortTestException("hi")”部分放入 try block 本身,并验证是否使用了正确的 catch block 。

当通过 MethodInfo.invoke() 发出异常时是否有某种原因会被重新转换?

最佳答案

http://msdn.microsoft.com/en-us/library/4k9x6bc0.aspx

根据 MSDN,如果调用的方法或构造函数抛出异常,则会抛出 TargetInvocationException。

关于c# - 为什么通过 method.invoke() 调用方法时自定义异常变为 System.Exception?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8979100/

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