Tim*_*man 4 c# static visual-studio-2005 exception
我在调试模式下在Visual Studio中运行此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
}
}
Run Code Online (Sandbox Code Playgroud)
在静态构造函数之外,当我到达带有错误的行时,Visual Studio会突出显示它并弹出有关异常的消息.但是在静态构造函数中,我没有得到这样的消息.我逐步走过,所以我知道我已经到了那条线而没有进一步.
为什么是这样?
(我不知道我的类实现IHttpHandlerFactory的事实是否重要,但是为了以防万一我将其包括在内.)
这是VS2005,.Net 2.0
编辑:我只想补充一点,事实上它是一个HttpHandler 似乎确实很重要.正如答案所示,默认行为是打破TypeInitializationException而不是内部异常.我测试了另一个没有HttpHandler的例子,看到这导致程序在使用该类的第一行中断.但在这种情况下,我的代码中没有任何行可以打破,因为该类只被调用为我的web.config文件中指定的HttpHandler.因此,它根本没有打破例外.
问题是抛出的异常实际上是一个TypeInitializationException,它包装抛出的任何异常.我不确定是什么设计权衡造成这种情况,但是IMO它是.NET开发中最烦人的事情之一,我很遗憾看到它仍然存在于.NET 4中.
在VS中,要尽快捕获异常,您需要启用第一次机会异常.转到Debug> Exceptions并选中"Common Language Runtime Exceptions",它会在抛出异常时立即中断.
(注意:如果您正在使用动态语言运行时,则需要更加挑剔捕获的异常,因为这显然会使用流控制的异常).