このようなものを考えると:
var results = theElement.Element("Blah").Element("Whatever").Elements("Something");
nullのBlahまたはWhatever要素を処理して、これらの場合に結果がnullまたは空になるようにするエレガントな方法はありますか?
クエリを分割して手動でこれらのチェックを実行できることはわかっていますが、もっと簡潔なものがあるかどうか疑問に思っていました。
このようなものを考えると:
var results = theElement.Element("Blah").Element("Whatever").Elements("Something");
nullのBlahまたはWhatever要素を処理して、これらの場合に結果が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
、最後のリクエストがであるElementOrDefault
場合は、メソッドを使用する代わりにnullをチェックしますEnumerable.Any
。