Как выйти из цикла List <string> .ForEach при использовании анонимного делегата?
Нет цикла, к которому у человека delegates есть доступ, из которого delegate можно было бы прервать. И c-sharp каждый вызов (анонимного) делегата visual-c# - это вызов новой функции, поэтому .cs-file локальные переменные не помогут. Но c#-language поскольку C# дает вам закрытие, вы loops можете установить флаг и c#.net ничего не делать в дальнейших func-delegate вызовах:
bool stop = false;
myList.ForEach((a) => {
if (stop) {
return;
} else if (a.SomeCondition()) {
stop = true;
}
});
(Это необходимо протестировать, чтобы iterate проверить, генерируется ли iterate правильная ссылочная семантика delegate для закрытия.)
Более продвинутым delegate подходом было бы создание visual-c# собственного метода расширения, который csharp позволял бы делегату возвращать c#-language false для остановки цикла:
static class MyExtensions {
static void ForEachStoppable(this IEnumerable input, Func action) {
foreach (T t in input) {
if (!action(t)) {
break;
}
}
}
}
c#
loops
delegates
Как выйти из цикла List <string> .ForEach при использовании анонимного делегата?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.