C# 5.0 Закрытие в циклах: различия между циклами и петлями Foreach
]вопрос:
в C# 5.0 зацепление захвата в цикле Foreach может быть захвачено правильно, но почему замыкание захвата в цикле FOR по -прежнему имеет проблемы?
]отвечать:
логически говоря, поведение закрытия в цикле для цикла является разумным. После разложения петли на его компоненты (инициализатор, состояние, итератор и корпус), инициатор выполняется только один раз. Следовательно, логично иметь только одну «переменную экземпляр».
]] Кроме того, в цикле для исходного значения переменной для каждой итерации не предопределено. Рассмотрим следующий пример:
]for (int i = 0, j = 10; i Console.WriteLine(i, j);
action();
}
в этом цикле значение j может измениться во время цикла. Какое ожидаемое поведение в этом случае?
], напротив, петля Foreach, похоже, объявляет новую переменную для каждой итерации, и эта переменная только для чтения. Следовательно, разумно думать о петле Foreach как объявление отдельной переменной только для чтения в каждой итерации, значение которой взято от итератора. Это объясняет, почему закрытие можно правильно захватить в цикле Foreach.
]Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3