Действительно ли этот код вызывает проблему «доступа к измененному закрытию»?

Взяв следующий код, Решарпер говорит мне, чтоvoicesSoFar а такжеvoicesNeededMaximum вызвать "доступ к измененному закрытию". Я читал об этом, но вот что меня озадачивает, так это то, что Решарпер предлагает исправить это, извлекая переменные прямо перед запросом LINQ. Но это то, где они уже есть!

Решарпер перестает жаловаться, если я просто добавлюint voicesSoFar1 = voicesSoFar сразу послеint voicesSoFar = 0, Есть ли какая-то странная логика, которую я не понимаю, которая делает предложение Решарпера правильным? Или есть способ безопасно "получить доступ к измененным замыканиям" в подобных случаях, не вызывая ошибок?

// 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));

Ответы на вопрос(3)

Ваш ответ на вопрос