我想在扩展方法的函数中修改局部变量。 参见
int myvar=0;
MyList.Where(
x =>
{
if (condition)
myvar += 1;
return false;
});
return myvar;
为什么这不起作用?
答案 0 :(得分:6)
你真的不想要修改Where
谓词正文中的局部变量。像这样的副作用的功能是坏消息;试着想象一下如果({例如)来自AsParallel()
生成的并行可枚举会发生什么 - 你将会遇到竞争条件。
如果你解释一下你想要完成什么,我相信我们中的一个人可以为此提供更好的方法。我的猜测是它看起来像这样:
int count = myList.Count(x => condition(x));
答案 1 :(得分:0)
Where
方法返回IEnumerable<T>
但您实际上并未枚举它(使用foreach,或通过对结果IEnumerator<T>
进行手动迭代)。