Мне нужен цикл for, который завершит все его итерации, даже если есть какое-либо исключение в любой из итераций.
Как обрабатывать исключение в цикле и продолжать итерацию?
Ответ 1
for (...)
{
try
{
// Do stuff
}
catch (Exception ex)
{
// Handle (or ignore) the exception
}
}
Ответ 2
Просто поставьте каждую итерацию внутри try..catch
foreach(Person a in people)
{
try
{
WorkOnPerson(a);
}
catch
{
// do something if you want to.
}
}
Ответ 3
Или, если это повторяющийся шаблон в вашей программе, , и вы рискуете этим уловить весь стиль исключения, добавьте его как расширение в свои коллекции. Применяя его к предыдущему примеру:
people.ForEachIgnorant(ofThrowingWorkOnPerson);
Или:
people.ForEachIgnorant(p => WorkOnPersonThatThrows(p));
Реализация:
public static void IgnorantForEach<T>(this IEnumerable<T> source, Action<T> action)
{
foreach (var item in source)
{
try
{
action(item);
}
catch { }
}
}
Ответ 4
Ну, дело в том... Ваше решение должно будет включать цикл for и какой-то процесс обработки ошибок/исключений, поэтому вам, вероятно, придется встроить инструкцию try catch в цикл for.
Если генерируется исключение, вы не сможете завершить эту итерацию так, как если бы исключение не было выбрано. Однако с помощью try catch вы можете убедиться, что ваш цикл выполняет все те итерации, которые не генерируют исключения.
Если вам нужна помощь по внедрению обработки исключений в цикле for, просто используйте пример, отправленный teedyay!
Ответ 5
Я думаю, что также стоит отметить, что если вы используете общий список - вы можете использовать следующее для повторения коллекции:
ForEach (действие действия)
http://msdn.microsoft.com/en-us/library/bwabdf9z.aspx
EmployeesList.ForEach(ProcessEmployee);
void ProcessEmployee(Employee employeeItem)
{
try
{
...
}
catch { }
}
Это имеет смысл сделать код в вашем цикле многократным.
Ответ 6
Знаете ли вы, что такое исключение и что вызовет его? Можете ли вы проверить это и предотвратить его бросание, т.е. CanCompleteStep или TryCompleteStep. если вы не можете закончить, просто пропустите этот шаг. Затем вы можете исключить обработку исключений из цикла.
Ответ 7
Для этого нет встроенной функции в цикле. Это не языковая функция, встроенная в С#, которая автоматически обрабатывает исключение и продолжит цикл.
Также, насколько это возможно, избегайте помещать блоки try-catch внутри цикла. Несмотря на то, что он решает проблему, о которой вы говорите, учтите, что компилятор и время выполнения должны выполнить эту дополнительную работу. Если бы не было никаких исключений, то все это было бы пустым.
Вместо этого исключения должны быть исключениями. Это то, что происходит исключительно: вне ваших соображений. Конечно, это только предположение, если вам действительно нужно продолжить цикл, перейдите к двум предложенным выше вариантам.