yield return
не может быть в try...catch
, но это не значит, что вы не можете перехватывать исключения во время получения возвращаемого значения.
Пример:
object value;
try {
value = SomeCodeThatCanBreak();
} catch (SomeException ex) {
// you could silently skip this item:
value = null;
}
if (value != null) {
yield return value;
}
Если исключение указывает на то, что коллекция изменилась, вы, тем не менее, выйдете из цикла, а не пропустив элементы, поскольку вы не получите больше элементов из перечислителя.
Вы должны решить, какое действие должно подходить для каждого типа исключений, которые вы ловите. В некоторых ситуациях может быть логично тихо обрабатывать исключения, но в большинстве ситуаций вы должны позволить всплыть исключению или вызвать другое исключение, если это лучше описывает проблему.