在匿名方法中修改变量

时间:2010-04-28 13:41:07

标签: c# linq-to-objects anonymous-methods

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

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

为什么这不起作用?

2 个答案:

答案 0 :(得分:6)

你真的想要修改Where谓词正文中的局部变量。像这样的副作用的功能是坏消息;试着想象一下如果({例如)来自AsParallel()生成的并行可枚举会发生什么 - 你将会遇到竞争条件。

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

int count = myList.Count(x => condition(x));

答案 1 :(得分:0)

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