XElement NullReferenceException

时间:2011-01-16 09:26:07

标签: linq nullreferenceexception xelement

我有以下代码。

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

现在,如果我返回的元素为null,我得到一个NullReferenceException,因为XElement为null。所以我将其更改为以下内容。

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

我希望必须有一种更优雅的方式来实现这一点,因为这种情况经常出现,我希望每次出现问题时都避免进行此类检查。非常感谢任何帮助

2 个答案:

答案 0 :(得分:2)

你可以写一个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.我写了这个因为我猜您可能想要调用null对象元素,我不知道你的确切情况,但是我添加了一些代码以便进一步澄清,完全根据你的情况完成XDocumentExtension类,并且一个注释扩展方法可以处理null对象。

答案 1 :(得分:1)

您实际上可以将XElement直接转换为字符串: http://msdn.microsoft.com/en-us/library/bb155263.aspx

所以

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

可能是

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