静态方法的空指针错误

本文关键字:错误 空指针 静态方法 | 更新日期: 2023-09-27 18:30:52

我从我的应用程序那里得到了一些错误报告,这些报告似乎没有任何意义。我有一个静态类,其中包含许多从代码的其他部分调用的公共静态方法。这些方法中的大多数在 XML 文档上创建一个元素。

大多数这些方法中的第一行是调用同一类中的私有静态方法,该方法在 XML 文档上创建元素并返回它,如下所示:

private static XmlElement BuildCmd(string name)
{
  XmlElement e = OtherClass.NewElement("CMD");
  e.SetAttribute("type", name);
  return e;
}
public static uint SendFlightReport(FlightData info, AircraftInfo aInfo)
{
  XmlElement cmd = BuildCmd("pirep");
  ....
  some other stuff
  ....
}

异常生成的堆栈转储都报告调用 BuildCmd 的行作为违规行,这毫无意义 - 调用静态方法时,如何拥有空指针(或者在 C# 中 - 对象引用未设置为对象的实例)?

编辑:对于那些询问的人,这是OtherClass.NewElement的代码:

public class OtherClass {
   private readonly XmlDocument doc = new XmlDocument();
   public XmlElement NewElement(string name) {
      lock (doc)
        return doc.CreateElement(name);
   }
}

静态方法的空指针错误

我怀疑您正在运行发布版本。 在这种情况下,由于编译器优化,行号通常略有偏差。 尝试运行调试版本;您可能会发现异常实际上是在.... some other stuff ....的第一行或第二行引发

例如,请参阅示例

https://stackoverflow.com/a/114854/385844

http://social.msdn.microsoft.com/Forums/zh/vsdebug/thread/afb7ae70-3e0c-4ea9-86ab-633fe1f9cf6a(VB.NET,但仍然...

http://social.msdn.microsoft.com/Forums/en-US/tfsbuild/thread/6af62159-fe6b-4554-8e46-d2b6c06fa253