Есть ли способ сделать доходность созданного Итератора Перейти к следующему пункту после исключения? - PullRequest
5 голосов
/ 08 февраля 2010

Есть ли способ заставить итератор, созданный по доходности, перейти к следующему элементу, если исключение происходит внутри одного из блоков итератора?

В настоящее время это не работает:

        Boolean result;
        while (true)
        {
            try
            {
               result =  enumerator.MoveNext(); //Taken from a yield created enumerable
               if (!result) break;
            }
            catch (Exception ex)
            {
                Console.WriteLine("CATCHED...");
                continue;
            }
        }

Ответы [ 2 ]

3 голосов
/ 08 февраля 2010

нет там нет.Сгенерированный код для итератора C # не поддерживает генерируемые исключения.Если выдается исключение, операция MoveNext не завершится, и следующий вызов будет воспроизведен из того же места с точки зрения сгенерированного кода итератора.

2 голосов
/ 08 февраля 2010

Linq для событий, также известный как RX, также известный как IObservable, имеет явную поддержку ошибок: http://msdn.microsoft.com/en-us/library/dd783449(VS.100).aspx

Проверьте это на http://themechanicalbride.blogspot.com/2009/07/introducing-rx-linq-to-events.html

...