У меня есть ряд отчетов об ошибках из моего приложения, которое, похоже, не имеет никакого смысла. У меня есть статический класс, который имеет множество публичных статических методов, которые вызываются из других частей моего кода. Большинство этих методов создают элемент в документе 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# - ссылка на объект, не установленную на экземпляр объекта) при вызове статического метода?
EDIT: Для тех, кто просил, вот код OtherClass.NewElement:
public class OtherClass {
private readonly XmlDocument doc = new XmlDocument();
public XmlElement NewElement(string name) {
lock (doc)
return doc.CreateElement(name);
}
}
Возможные виновники: 'OtherStaticClass' (возможно, статический конструктор) или' é' (возвращаемое значение 'OtherStaticClass.NewElement'). Вы пробовали отладку? –
Пожалуйста, покажите нам «некоторые другие вещи». Мне (к сожалению, с большой частотой) пришлось бороться с тем, что номера строк в трассировке стека в производственных средах часто совершенно ошибочны. Очевидно (очевидно), что 'BuildCmd (« pirep »)' не может, возможно, выбросить NRE. Так это не так. Однако имена методов в трассировке стека никогда не ошибаются. Поэтому, если он действительно обвиняет 'SendFlightReport', тогда NRE * defintely * происходит там. Пожалуйста, опубликуйте весь метод. –
Я думаю, было бы полезно показать реализацию «OtherStaticClass.NewElement ...» – grant