静态方法的空指针错误

时间:2012-04-13 02:32:13

标签: c#

我从我的应用程序中收到了一些似乎没有任何意义的错误报告。我有一个静态类,它有许多公共静态方法,可以从我的代码的其他部分调用。这些方法中的大多数都在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);
   }
}

1 个答案:

答案 0 :(得分:-1)

我怀疑你正在运行发布版本。在这种情况下,由于编译器优化,行号通常略微偏离。尝试运行调试版本;你可能会发现异常实际上是在.... 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