c# - 对象未设置为引用

标签 c# plugins dynamics-crm

这个问题让我发疯,因为我看不出是什么原因造成的。这种行为是出乎意料的,我只是不明白它是如何发生的。当我使用下面的代码执行插件时,我收到错误消息“badaoom”。正如预期的那样。

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

最佳答案

在第一个示例中,异常是在调用者级别处理的,直到找到 catch block 为止。在第二个示例中,异常在与 Execute 方法的 try 关联的强制 catch 或 finally block 中进行处理。
因此,在 catch 或 finally block 内的代码中,您会遇到空引用异常

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 block ,但不能省略两个关键字之一及其 block

关于c# - 对象未设置为引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22982411/

相关文章:

c# - 在运行时交换强签名程序集

emacs - 关于修复公司模式与Yasnippet之间的干扰问题

javascript - Dynamics CRM 在线升级后/api/data/v8.2 到/api/data/v9.0?

java - 如何通过Java访问Dynamics CRM

c# - 如何快速搜索单词或数字 c#

c# - 用于 SMB 文件共享的 S3 API

c# - 静态方法在 Web 开发中是否安全?

c# - 无法在 MVVM UWP 中取消选择 ListView 项

java - 有什么方法可以使用 Maven 插件在 Android Studio 中禁用 javadoc 崩溃吗?

dynamics-crm-2011 - CRM 实体上的计算字段