拡張メソッドの関数でローカル変数を変更したい。見る
int myvar=0;
MyList.Where(
x =>
{
if (condition)
myvar += 1;
return false;
});
return myvar;
なぜそれが機能しないのですか?
拡張メソッドの関数でローカル変数を変更したい。見る
int myvar=0;
MyList.Where(
x =>
{
if (condition)
myvar += 1;
return false;
});
return myvar;
なぜそれが機能しないのですか?
述語の本体でローカル変数を変更する必要はありません。Where
このような副作用のある関数は悪いニュースです。これが(たとえば)によって生成された並列列挙型から発生した場合に何が起こるかを想像してみてくださいAsParallel()
-競合状態になります。
あなたが達成しようとしていることを説明すれば、私たちの一人がその目的のためのより良い手段を提供できると確信しています。私の推測では、次のようになります。
int count = myList.Count(x => condition(x));
このWhere
メソッドはを返しますIEnumerable<T>
が、実際には列挙していません(foreachを使用するか、結果を手動で反復処理しますIEnumerator<T>
)。