6

このようなものを考えると:

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

nullのBlahまたはWhatever要素を処理して、これらの場合に結果がnullまたは空になるようにするエレガントな方法はありますか?

クエリを分割して手動でこれらのチェックを実行できることはわかっていますが、もっと簡潔なものがあるかどうか疑問に思っていました。

4

1 に答える 1

6

これを行うために、いくつかの拡張メソッドを追加できます。メソッドの場合、Elementnullまたは要素自体を返します。この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

于 2011-06-20T16:36:08.260 に答える