gpt4 book ai didi

c# - 无法捕获 Invoke 在已编译表达式上抛出的异常

转载 作者:行者123 更新时间:2023-11-30 17:23:08 26 4
gpt4 key购买 nike

在类里面:

private Func<T, object> pony;

在我的函数中:

object newValue;
try {
newValue = pony.Invoke(model as T); // This is the line where I get an exception!
} catch (Exception exception) {
// This code is never run, even though I get an exception two lines up!
if(exception is DivideByZeroException) throw new DivideByZeroException("Division by zero when calculating member " + GetMemberName(), exception);
throw;
}

我希望在抛出异常时得到异常,但我在 newValue = pony.Invoke(model as T); 行得到了一个 DivideByZeroException。为什么是这样?我可以做些什么吗?

目前在 Cassini 中运行的 asp.net mvc2 应用程序中。

如果我选择“在 Visual Studio 2008 中开始调试”,错误将被捕获并重新抛出并提供额外信息!

问题是我显然不明白内部异常是如何工作的。异常被捕获,但随后仅显示内部异常,这完全是另一个问题。

最佳答案

编译表达式抛出的异常通常由 try .. catch 构造处理,因此我预计您的代码中还有其他问题。例如,如果您尝试使用以下代码,它会按预期运行:

Expression<Func<int, int>> f = x => 10 / x;
Func<int, int> fcompiled = f.Compile();
try {
Console.WriteLine(fcompiled(0));
} catch (DivideByZeroException e) {
Console.WriteLine("Divison by zero");
}

作为旁注,您可能应该使用单独的 catch 来处理 DivideByZeroException(就像我在示例中所做的那样)。这是捕获不同类型异常的更简洁且推荐的方法。

在没有调试的情况下运行应用程序时(例如,通过向 catch block 添加一些调试打印),您能否检查异常是否真的未处理?运行应用程序时打印了什么异常(毕竟,您的代码无论如何都会重新抛出一些异常,因此输出可能不清楚)。

关于c# - 无法捕获 Invoke 在已编译表达式上抛出的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2341353/

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