鉴于这样的事情:
var results = theElement.Element("Blah").Element("Whatever").Elements("Something");
是否有一种优雅的方法来处理 null Blah 或任何元素,因此在这些情况下结果只是 null 或空?
我知道我可以拆分查询并手动进行这些检查,但想知道是否有更简洁的内容。
鉴于这样的事情:
var results = theElement.Element("Blah").Element("Whatever").Elements("Something");
是否有一种优雅的方法来处理 null Blah 或任何元素,因此在这些情况下结果只是 null 或空?
我知道我可以拆分查询并手动进行这些检查,但想知道是否有更简洁的内容。
您可以添加一些扩展方法来为您执行此操作。对于该Element
方法,您将返回 null 或元素本身。对于该Elements
方法,您将返回一个空结果或目标元素。
这些是扩展方法:
public static class XElementExtensions
{
public static XElement ElementOrDefault(this XElement element, XName name)
{
if (element == null)
return null;
return element.Element(name);
}
public static IEnumerable<XElement> ElementsOrEmpty(this XElement element, XName name)
{
if (element == null)
return Enumerable.Empty<XElement>();
return element.Elements(name);
}
}
您可以通过以下方式使用它们:
var query = theElement.ElementOrDefault("Blah")
.ElementOrDefault("Whatever")
.ElementsOrEmpty("Something");
if (query.Any())
// do something
else
// no elements
如果您不查询ElementsOrEmpty
并且您的最后一个请求是 forElementOrDefault
您将检查 null 而不是使用该Enumerable.Any
方法。