这个问题让我感到疯狂,因为我无法看到导致它的原因。这种行为是出乎意料的,我无法看到它是如何发生的。当我使用下面的代码执行我的插件时,我收到错误消息" bada boom "。正如预期的那样。
public void Execute(IPluginExecutionContext context)
{
throw new Exception("bada boom");
try
{
throw new Exception("bada bing");
...
} catch (Exception) { }
...
}
然而,当我评论第一次投掷时,我无法看到" bada bing "。相反,我得到" 对象未设置为引用"!什么鸭子?! (错字打算。)
public void Execute(IPluginExecutionContext context)
{
//throw new Exception("bada boom");
try
{
throw new Exception("bada bing");
...
} catch (Exception) { }
...
}
此问题的图片。
答案 0 :(得分:2)
在第一个示例中,异常在调用者级别处理,直到找到catch块为止。在第二个示例中,异常在与Execute方法的try相关联的强制catch或finally块中处理 所以在catch或finally块中的代码中你有一个空引用异常
void Main()
{
try
{
Execute();
}
catch(Exception x)
{
Console.WriteLine("In main: " + x.Message);
}
}
public void Execute()
{
// Goes to the catch block in main
//throw new Exception("bada boom");
try
{
// Goes to the catch block associated with this try
throw new Exception("bada bing");
}
catch(Exception x)
{
// Uncomment this to see the null reference exception in main
// Console.WriteLine("In Execute: " + x.InnerException.Message);
Console.WriteLine("In Execute:" + x.Message);
}
}
嗯,当然,当我说强制我想说你不能写
try
{
....
}
在try之后没有catch或finally子句。并且您可以编写一个catch或finally块而不需要代码,但是您不能省略两个关键字中的一个及其块