XElement NullReferenceException - PullRequest
       9

XElement NullReferenceException

3 голосов
/ 16 января 2011

У меня есть следующий код.

 XElement opCoOptOff = doc.Descendants(ns + "OpCoOptOff").FirstOrDefault();
 String opCo = opCoOptOff.Element(ns + "strOpCo").Value;

Теперь, если элемент, который я возвращаю, равен нулю, я получаю исключение NullReferenceException, поскольку XElement равен нулю. Поэтому я изменил это на следующее.

String opCo = opCoOptOff.Element(ns + "strOpCo").Value;
 if(opCoOptOff != null)
        {
String opCo = opCoOptOff.Element(ns + "strOpCo").Value;

Я надеюсь, что должен быть более элегантный способ сделать это, так как этот сценарий встречается часто, и я хотел бы избегать выполнения такого типа проверки каждый раз, когда возникает проблема. Любая помощь будет принята с благодарностью

Ответы [ 2 ]

2 голосов
/ 16 января 2011

Вы можете написать extension method и использовать его где угодно:

public static class XDocumentExtension
{
   public static string GetSubElementValue(this XElement element, string item)
   {
        if(element != null && element.Value != null)
        {
           if (element.Element(item) != null)
           {
              return element.Element(item).Value;
           }
        }
        return null;
   }

   public static XElement GetElement(this XElement element, string item)
   {
        if (element != null)
            return element.Element(item);

        return null;
   }

   public static XElement GetElement(this XDocument document, string item)
   {
        if (document != null)
           return document.Descendants("item").FirstOrDefault();
        return null;
   }
}

Используйте его как:

String opCo = opCoOptOff.Element(ns + "strOpCo").GetSubElementValue(ns + "strOpCo");

Также вы можете добавить другие расширения дляваша цель.

Редактировать: Я бы обновил ответ, но если вы внимательно прочитаете его, прежде чем я напишу, вы можете add other extensions for your purpose. Я написал это, потому что я думаю, что вы, возможно, захотите вызвать нульобъекты Элемент, я не знаю, какова ваша точная ситуация, но я добавляю некоторый код для большей ясности, зависит от вашей ситуации, завершите класс XDocumentExtension, и один метод расширения примечания может работать с нулевыми объектами.

1 голос
/ 25 марта 2011

Вы можете фактически привести XElement непосредственно к строке: http://msdn.microsoft.com/en-us/library/bb155263.aspx

, поэтому

String opCo = opCoOptOff.Element(ns + "strOpCo").Value;

может быть

string opCo = (string) opCoOptOff.Element(ns + "strOpCo");
...