изменить переменную в анонимном методе - PullRequest
0 голосов
/ 28 апреля 2010

Я хочу изменить локальную переменную в функции метода расширения. См

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

Почему это не работает?

Ответы [ 2 ]

6 голосов
/ 28 апреля 2010

Вы действительно не хотите изменить локальную переменную в теле предиката Where. Функции с такими побочными эффектами - плохие новости; попытайтесь представить, что произойдет, если это произойдет (например) из параллельного перечислимого, сгенерированного AsParallel() - у вас будет условие гонки.

Если вы объясните, что вы пытаетесь достичь, я уверен, что один из нас мог бы предоставить лучшее средство для достижения этой цели. Я думаю, что это будет выглядеть примерно так:

int count = myList.Count(x => condition(x));
0 голосов
/ 28 апреля 2010

Метод Where возвращает IEnumerable<T>, но вы фактически не перечислили его (с помощью foreach или путем ручной итерации по полученному IEnumerator<T>).

...