对象未设置为引用

时间:2014-04-10 08:15:40

标签: c# plugins dynamics-crm

这个问题让我感到疯狂,因为我无法看到导致它的原因。这种行为是出乎意料的,我无法看到它是如何发生的。当我使用下面的代码执行我的插件时,我收到错误消息" 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) { }
  ...
}

此问题的图片。

enter image description here

1 个答案:

答案 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块而不需要代码,但是您不能省略两个关键字中的一个及其块