6

鉴于这样的事情:

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

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

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

4

1 回答 1

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并且您的最后一个请求是 forElementOrDefault您将检查 null 而不是使用该Enumerable.Any方法。

于 2011-06-20T16:36:08.260 回答