このコードを置き換えました:
foreach( var source in m_sources )
{
if( !source.IsExhausted )
{
....
}
}
これで:
foreach( var source in m_sources.Where( src => !src.IsExhausted ) )
{
...
}
これでコードは (私には) 良くなりましたが、ここで実際に何が起こっているのか疑問に思っています。この場合、パフォーマンスが心配です。このフィルターを適用することで、何らかのコンパイラ マジックが発生することを意味する場合は、悪いニュースです。
2 つのコードは基本的に「同じ」ことを行っていますか? フィルタリングを実行して foreach に渡すために一時的なコンテナーが作成されますか?
この件に関するヘルプは大歓迎です。ありがとう。