コレクションでLinqを使用していますが、コレクションが空でないことを確認するのに最適ですか?Linq Any()vs MoveNext()
HasChild = Childs.GetEnumerator().MoveNext() ? true : false;
と
HasChild = Childs.Any() ? true : false;
コレクションでLinqを使用していますが、コレクションが空でないことを確認するのに最適ですか?Linq Any()vs MoveNext()
HasChild = Childs.GetEnumerator().MoveNext() ? true : false;
と
HasChild = Childs.Any() ? true : false;
IEnumerator<T>
ので、実装IDisposable
あなたがいないシンプルなライン
// Don't do this: it can cause a resource leakage
HasChild = Childs.GetEnumerator().MoveNext() ? true : false;
けど(一般的なケースに)配置する必要があります(これとはリソースを割り当てることができます)断片
bool HasChild = false;
using (var en = Childs.GetEnumerator()) {
HasChild = en.MoveNext(); // You have no need in ternary operator here
}
そしてAny
の場合、あなたは
bool HasChild = Childs.Any();
そしてEnumerable<T>.Any
を行う必要があり、すべてはあなたのための冗長な部分を行いますときあまりにも長ったらしい思わない:
http://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs,8788153112b7ffd0
public static bool Any<TSource>(this IEnumerable<TSource> source) {
if (source == null) throw Error.ArgumentNull("source");
using (IEnumerator<TSource> e = source.GetEnumerator()) {
if (e.MoveNext()) return true;
}
return false;
}
Enumerable.Any()もコレクションに 'Count'の存在をチェックしていると誓っていたかもしれませんが、' Count() 'がそうしているようです。 http://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs,1165 – kiziu
kiziu:http://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs、 8788153112b7ffd0 –
はい、私は知っている、ただの観測です。誰かが恩恵を受ける可能性があると感じる場合、おそらく「Any」の微視的最適化につながる可能性があります。 – kiziu
不要true/falseを投影する。 'HasChild = Childs.Any()'が行います。 –
ありがとう@YuvalItzchakov – VIJI
「Any」の[ソースコード](http://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs,1165)を見てみると(MoveNext'を試してみてください) –