gpt4 book ai didi

c# - 当我的异常发生在静态构造函数中时,为什么 Visual Studio 不显示异常消息?

转载 作者:太空狗 更新时间:2023-10-30 00:28:34 25 4
gpt4 key购买 nike

我在 Visual Studio 中以 Debug模式运行此 C# 代码:

public class MyHandlerFactory : IHttpHandlerFactory
{
private static Dictionary<string, bool> myDictionary = new Dictionary<string, bool>();
static MyHandlerFactory()
{
myDictionary.Add("someKey",true);
myDictionary.Add("someKey",true); // fails due to duplicate key
}
}

在静态构造函数之外,当我到达错误行时,Visual Studio 会突出显示它并弹出有关异常的消息。但是在静态构造函数中我没有得到这样的消息。我正在逐行执行,所以我知道我将到达那条线,不再继续。

这是为什么?

(我不知道我的类实现 IHttpHandlerFactory 这一事实是否重要,但我将其包括在内以防万一。)

这是 VS2005,.Net 2.0

编辑:我只想补充一点,它是一个 HttpHandler 的事实确实似乎很重要。正如答案所表明的,默认行为是中断 TypeInitializationException 而不是内部异常。我测试了另一个没有 HttpHandler 的示例,发现这导致程序在使用该类的第一行中断。但在这种情况下,我的代码中没有任何行可以中断,因为该类仅作为我的 web.config 文件中指定的 HttpHandler 被调用。因此,它根本没有中断异常。

最佳答案

问题是抛出的异常实际上是一个 TypeInitializationException,它包装了抛出的任何异常。我不确定是什么设计权衡导致了这种情况,但我认为这是 .NET 开发中最烦人的事情之一,我很难过看到它仍然存在于 .NET 4 中。

在 VS 中,要尽快捕获异常,您需要打开第一次机会异常。转到 Debug > Exceptions 并检查“Common Language Runtime Exceptions”,它会在抛出异常时立即中断。

(注意:如果您使用的是动态语言运行时,则需要更加挑剔捕获哪些异常,因为这显然是使用异常来进行流量控制)。

关于c# - 当我的异常发生在静态构造函数中时,为什么 Visual Studio 不显示异常消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2519329/

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