Esse código realmente causa um problema de "acesso ao fechamento modificado"?
Tomando o código a seguir, o Resharper me diz quevoicesSoFar
evoicesNeededMaximum
causar "acesso a um fechamento modificado". Eu li sobre isso, mas o que me intriga aqui é que o Resharper sugere corrigir isso extraindo as variáveis logo antes da consulta LINQ. Mas é aí que eles já estão!
O compartilhador pára de reclamar se eu apenas adicionarint voicesSoFar1 = voicesSoFar
logo depoisint voicesSoFar = 0
. Existe alguma lógica estranha que não entendo que corrija a sugestão do Resharper? Ou existe uma maneira de "acessar com segurança fechamentos modificados" em casos como esses sem causar bugs?
// this takes voters while we have less than 300 voices
int voicesSoFar = 0;
int voicesNeededMaximum = 300;
var eligibleVoters =
voters.TakeWhile((p => (voicesSoFar += p.Voices) < voicesNeededMaximum));