0

我想在扩展方法的函数中修改局部变量。看

int myvar=0;
MyList.Where(
    x =>
        {
            if (condition)
                myvar += 1;
            return false;
        });
return myvar;

为什么这不起作用?

4

2 回答 2

6

您真的不想Where修改谓词主体中的局部变量。像这样有副作用的函数是个坏消息;尝试想象如果这来自(例如)来自于生成的并行枚举会发生什么AsParallel()- 你将有一个竞争条件。

如果您解释您要完成的工作,我相信我们中的一个人可以为此提供更好的方法。我的猜测是它看起来像这样:

int count = myList.Count(x => condition(x));
于 2010-04-28T13:46:37.463 回答
0

Where方法返回 anIEnumerable<T>但您实际上并未枚举它(使用 foreach 或通过手动迭代结果IEnumerator<T>)。

于 2010-04-28T13:47:06.617 回答