处理链式XElement轴方法中的空引用的优雅方法

时间:2011-06-20 13:38:23

标签: .net linq-to-xml xelement method-chaining

考虑到这样的事情:

var results = theElement.Element("Blah").Element("Whatever").Elements("Something");

有没有一种优雅的方法来处理null Blah或Whatever元素,因此在这些情况下结果只是null或空?

我知道我可以拆分查询并手动进行这些检查,但想知道是否有更简洁的事情。

1 个答案:

答案 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方法。