У меня есть несколько классов, которые могут Process ()
объекты и возвращать свои собственные объекты:
public override IEnumerable Process(IEnumerable incoming) { ... }
Я хочу написать класс процессора, который может оборачивать один из этих процессоров и регистрировать любые неперехваченные исключения что может вызвать обернутый метод Process ()
. Моя первая идея была примерно такой:
public override IEnumerable Process(IEnumerable incoming) {
try {
foreach (var x in this.processor.Process(incoming)) {
yield return x;
}
} catch (Exception e) {
WriteToLog(e);
throw;
}
}
, но это не работает из-за CS1626: Невозможно получить значение в теле блока try с предложением catch .
Итак, я хочу написать что-то концептуально эквивалентное, но компилируемое. :-) У меня есть это:
public override IEnumerable Process(IEnumerable incoming) {
IEnumerator walker;
try {
walker = this.processor.Process(incoming).GetEnumerator();
} catch (Exception e) {
WriteToLog(e);
throw;
}
while (true) {
T value;
try {
if (!walker.MoveNext()) {
break;
}
value = walker.Current;
} catch (Exception e) {
WriteToLog(e);
throw;
}
yield return value;
}
}
, но это сложнее, чем я ожидал, и я ' Я не совсем уверен в его правильности или в том, что нет более простого способа.
На правильном ли я здесь пути? Есть ли более простой способ?