2009-10-19 2 views
1

Я создаю xml-файл. Части файла являются статическими. Некоторые из файлов являются динамическими. В моем коде есть ошибка «Ссылка на нулевой объект».Linq XML Динамическое здание

Любые советы были бы замечательными.

private XElement BuildDataElement() 
{ 
    // this is going to be more complicated 
    return new XElement("data"); 
} 

public void TestXML(string fname) 
{ 
    // build the data element 
    XElement allData = BuildDataElement(); 

    // Build the header 
    XDocument doc = new XDocument(
     new XElement("map", 
      new XAttribute("showLabels", "1"), 
      new XAttribute("includeNameInLabels", "1"), 
      new XElement("colorRange", 
       new XElement("color", 
       new XAttribute("minValue", "1") 
       ) 
      ), 
      allData, 
      new XElement("application", 
       new XElement("apply", 
        new XAttribute("toObject", "TOOLTIP"), 
        new XAttribute("styles", "TTipFont,MyDataPlotStyle") 
       ) 
      ) 
     ) 
    ); 

    if (File.Exists(fname)) 
     File.Delete(fname); 
    doc.Save(fname); 
     } 
+3

Я не понимаю, почему вы получите исключение NullReferenceException в этом коде. Пожалуйста, предоставьте краткую, но полную программу, которая демонстрирует проблему. –

+0

Код, как вы ему предоставили, просто отлично подходит для меня в LINQPad. Возможно, вы передаете null имя файла в TestXML? – StriplingWarrior

ответ

0

Единственный способ в предоставленном фрагменте. Я вижу, что получение ошибки будет 2 двух места.

BuildDataElement(); 

Может генерировать ошибку, а не документ Xml.

Следующая если BuildDataElement(); возвращается, что может быть проблемой, так как я предполагаю, что XDocument делает .ToString() или какое-либо действие на allData

7

Любые советы будут удивительным.

У вас есть это. Вот мои советы:

  • Получить отладчик.
  • Установите отладчик на разрыв во всех исключениях.
  • Запустите код в отладчике до тех пор, пока не произойдет исключение нулевой ссылки.
  • Укажите, какое значение было null, которое вы не ожидали быть нулевым.
  • Либо введите значение null, которое обрабатывает ситуацию, когда значение равно null, либо измените логику, чтобы стало невозможно, чтобы это значение было нулевым.
  • Тщательно пересмотреть код и проверить исправление.
  • Напишите регрессионный тест для тестовых наборов, который проверяет, что эта ошибка не возвращается.
+1

Согласовано, выясните, что ошибка включена с отладчиком сначала, а не публикует весь метод. –

Смежные вопросы