C# 是否有任何方法可以使生成的迭代器在出现异常时继续执行下一项?

C# 是否有任何方法可以使生成的迭代器在出现异常时继续执行下一项?,c#,.net,exception,yield,iterator,C#,.net,Exception,Yield,Iterator,当其中一个迭代器块内发生异常时,是否有任何方法使生成的迭代器继续执行下一项 这目前不起作用: Boolean result; while (true) { try { result = enumerator.MoveNext(); //Taken from a yield created enumerable if (!result) br

当其中一个迭代器块内发生异常时,是否有任何方法使生成的迭代器继续执行下一项

这目前不起作用:

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

不,没有。为C#迭代器生成的代码不支持抛出异常。如果抛出异常,MoveNext操作将不会完成,并且下一个调用将从生成的迭代器代码的同一位置重播

Linq to events,又名RX,又名IObservable明确支持错误:


查看不完全正确,枚举器引发的异常将使其处于“枚举已完成”状态。因此无法使其前进一步?应该有。@aattia,MoveNext方法是前进一步的方法。另一段代码通过抛出异常来防止这种情况发生。引发异常的枚举数从根本上被破坏,因为99%的IEnumerable使用都无法使用它。添加一个方法说“如果迭代器已经坏了,请继续”没有什么价值。