«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему захват закрытия проблематично в C# 5.0 для петли и нет такой проблемы в петлях Foreach?

Почему захват закрытия проблематично в C# 5.0 для петли и нет такой проблемы в петлях Foreach?

Опубликовано в 2025-04-12
Просматривать:713

Why are Captured Closures Problematic in C# 5.0 For Loops but Not Foreach Loops?

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