XElement NullReferenceException

发布于 2024-10-12 20:16:57 字数 504 浏览 3 评论 0原文

我有以下代码。

 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;

我希望必须有一种更优雅的方法来执行此操作,因为这种情况经常出现,并且我希望避免每次出现问题时都进行此类检查。任何帮助将不胜感激

I have the following code.

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

Now if the element I return is null, I am getting a NullReferenceException since the XElement is null. So I changed it to the following.

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

I am hoping there has to be a more elegant way to do this since this scenario comes up often and I would like to avoid doing this type of check every time there is an issue. Any assistance would be greatly appreciated

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

与君绝 2024-10-19 20:16:57

您可以编写 扩展方法 并使用它在任何地方:

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");

您也可以根据您的目的添加其他扩展。

编辑:我更新了答案,但如果您在我写之前仔细阅读它,您可以根据您的目的添加其他扩展。我写这个是因为我猜您可能想要调用 null 对象 Element,我不知道您的具体情况是什么,但我添加了一些代码以进行更多说明,根据您的情况完成 XDocumentExtension 类,并且注意扩展方法可以在 null 对象上工作。

You can write an extension method and use it anywhere:

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;
   }
}

Use it as :

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

Also you can add other extensions for your purpose.

Edit: I'd updated answer but if you read it carefully before I wrote you can add other extensions for your purpose. I wrote this because I guess you may be want to call on null objects Element, I don't know what's exact situation of yours but I add some code for more clarification, depend on your situation complete the XDocumentExtension class, and one note extension methods can work on null objects.

趴在窗边数星星i 2024-10-19 20:16:57

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

这样

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

可能是

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

You can actually cast the XElement directly to a string:
http://msdn.microsoft.com/en-us/library/bb155263.aspx

so

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

could be

string opCo = (string) opCoOptOff.Element(ns + "strOpCo");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文