私はWinFormsを使用しており、データベースへの変更を保存する前に、使用されているErrorProviderが表示されているコントロールのいずれかでエラーを保持しているかどうかを確認する必要がありました。
私はそれらの間でそれを行うためのいくつかの方法を考え出しました:
ControlContainer上の単純なforeachループ:
foreach (Control c in ctrlcontainer) { if (epOrderHeader.GetError(c) != string.Empty) { return true; } } return false;
リスト拡張メソッドExists(Predicate)の使用:
return(ctrlcontainer.Exists(c => epOrderHeader.GetError(c)!= string.Empty);
胃からすぐに、2番目が最も速いと予想しましたが、Eqatec Profilerを使用して、foreachループがわずかに速い(私の場合は約1ms)ことを発見しました。これは重要ではありませんが、なぜこれが起こるのか疑問に思います。
コンパイラはこれらのメソッドをどのように変換し、なぜ最初のメソッドが高速なのですか?