考虑到这样的事情:
var results = theElement.Element("Blah").Element("Whatever").Elements("Something");
有没有一种优雅的方法来处理null Blah或Whatever元素,因此在这些情况下结果只是null或空?
我知道我可以拆分查询并手动进行这些检查,但想知道是否有更简洁的事情。
答案 0 :(得分:6)
您可以添加一些扩展方法来为您执行此操作。对于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
并且您的上一个请求是ElementOrDefault
,那么您将检查null而不是使用Enumerable.Any
方法。