Как обрабатывать исключение в цикле и продолжать итерацию?
Мне нужен цикл for, который завершит все свои итерации, даже если есть какое-либо исключение в любой из итераций.
7 ответов
просто поместите каждую итерацию внутри попытки..лови
foreach(Person a in people)
{
try
{
WorkOnPerson(a);
}
catch
{
// do something if you want to.
}
}
или, если это повторяющийся шаблон в программе и вы рискуете для этого поймать весь стиль исключения, оберните его как расширение для ваших коллекций. Применяя его к предыдущему примеру:
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 { }
}
}
Ну, дело в том ... Ваше решение должно будет включать цикл for и какой-то процесс обработки ошибок/исключений, поэтому вам, вероятно, придется встроить оператор try catch в цикл for.
Если создается исключение, вы не сможете выполнить эту итерацию, как если бы исключение не было создано. Однако с помощью try catch вы можете убедиться, что ваш цикл выполняет все те итерации, которые не вызывают исключений.
Если вам нужно помогите с встраиванием обработки исключений в цикл for, просто используйте пример, опубликованный teedyay!
Я думаю, также стоит отметить, что если вы используете общий список - вы можете использовать следующее для итерации коллекции:
ForEach (действие действия)
http://msdn.microsoft.com/en-us/library/bwabdf9z.aspx
EmployeesList.ForEach(ProcessEmployee);
void ProcessEmployee(Employee employeeItem)
{
try
{
...
}
catch { }
}
это имеет преимущество сделать код в вашем цикле многоразовым.
знаете ли вы, что такое исключение и что его вызовет? Можете ли вы проверить его и предотвратить его выброс, т. е. CanCompleteStep или TryCompleteStep. если вы не можете просто пропустить этот шаг. Затем вы можете вывести обработку исключений из цикла.
нет встроенной функции в цикле для этого. Это не языковая функция, встроенная в C#, которая автоматически обрабатывает исключение и продолжает цикл.
также по мере возможности, пожалуйста, не ставьте блоки try-catch внутри петли. Несмотря на то, что это решает проблему, которую вы упомянули, учтите, что компилятор и время выполнения должны выполнить эту дополнительную работу. Если бы не было исключений, все это пропало бы впустую.
пусть исключения будут исключениями. Это то, что происходит исключительно: вне ваших разработанных входных соображений. Конечно, это только предложение, если вам действительно нужно продолжить цикл, перейдите к двум предложенным выше вариантам.