Анонимный делегат c # в цикле

var $=jQuery.noConflict();

$(document).ready(function(){
    // jQuery code is in here
});

Прислушаться к ответам Ашвани Панвара и Циссо: https://stackoverflow.com/a/29341144/3010027

13
задан Heinzi 19 November 2009 в 02:15
поделиться

3 ответа

Сделайте локальную копию i :

   for (int i = 0; i < nics.Count; i++)
   {
         int j = i;
         rs[i] = new RollingSeries(monitor, new RollingSeries.NextValueDelegate(delegate()
         {
            return GetNetworkUtilization(nics[j]);
          }));
    }

Красота замыканий

22
ответ дан 1 December 2019 в 20:00
поделиться

Используйте локальную копию, чтобы получить другой значение на итерацию

for (int i = 0; i < nics.Count; i++)
   {
         int localI = i;
         rs[i] = new RollingSeries(monitor, new RollingSeries.NextValueDelegate(delegate()
         {
            return GetNetworkUtilization(nics[localI]);
          }));
    }
6
ответ дан 1 December 2019 в 20:00
поделиться

Поместите int j = i в свой цикл и обратитесь к j в лямбда-выражении.

Если вам интересно, почему это происходит , вот запись в блоге MSDN, содержащая подробное техническое объяснение: Закрытие переменной цикла считается вредным

4
ответ дан 1 December 2019 в 20:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: