我如何在这个c# LINQ到XML语句中检查NullReferenceException ?

本文关键字:语句 XML 检查 NullReferenceException LINQ | 更新日期: 2023-09-27 18:17:03

我怎么能检查一个NullReferenceException在这个c# LINQ到XML语句没有包装整个事情在一个尝试/捕获?如果任何属性为空,我希望它仍然尝试获取剩余的数据。

谢谢。

XElement doc = XElement.Load("test.xml");
var nodes =
   from node in doc.Elements("Customer")
   select new
   {
       Name = node.Element("FullName").Value,
       Zip = node.Element("ZipCode").Value,
       Active = node.Element("ActiveCustomer").Value,
   }; 

我如何在这个c# LINQ到XML语句中检查NullReferenceException ?

直接使用explicit强制类型转换。如果没有找到该元素,它将返回null,不会引起异常。

var nodes =
from node in doc.Elements("Customer")
select new
{
   Name = (string)node.Element("FullName"),
   Zip = (string)node.Element("ZipCode"),
   Active = (string)node.Element("ActiveCustomer"),
}; 

使用三元操作符

三目运算符

XElement doc = XElement.Load("test.xml");
var nodes =
from node in doc.Elements("Customer")
select new 
{
  Name = node.Element("FullName") !=null ? node.Element("FullName").Value : null,
  Zip = node.Element("ZipCode") !=null ? node.Element("ZipCode").Value : null,
  Active = node.Element("ActiveCustomer") !=null ? node.Element("ActiveCustomer").Value : null
};

你可以试试这个:

select new
{
    Name = node.Element("FullName")!=null ? node.Element("FullName").Value : null,
    Zip = node.Element("ZipCode")!=null ? node.Element("ZipCode").Value : null,
    Active = node.Element("ActiveCustomer")!=null ? node.Element("ActiveCustomer").Value : null
}; 

?是条件运算符。有关此操作的更多文档,请查看此处

您可以使用三元运算符检查null

这样做:

var nodes =
from node in doc.Elements("Customer")
select new
{
    Name = node.Element("FullName") !=null ? node.Element("FullName").Value : null,
    Zip = node.Element("ZipCode") !=null ? node.Element("ZipCode").Value : null,
    Active = node.Element("ActiveCustomer") !=null ? node.Element("ActiveCustomer").Value : null
};