2010-02-08 9 views
5

Yineleyici bloklarından birinde bir istisna oluştuğunda, verim oluşturucunun bir sonraki öğeye devam etmesini sağlamak için herhangi bir yol var mı?Bir getiri yaratmanın herhangi bir yolu var Iterator Bir İstisna üzerine sonraki maddeye devam et?

Bu, şu anda çalışmıyor:

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

cevap

3

Hayır yok. Bir C# yineleyici için oluşturulan kod atılan istisnaları desteklemez. Bir istisna atılırsa, MoveNext işlemi tamamlanmaz ve bir sonraki çağrı, oluşturulan yineleyici kodunun bakış açısından aynı yerden tekrar oynatılır.

+0

adresten kontrol edin belirtmek, bildirmek. –

+0

Yani bir adım ilerlemenin bir yolu yok mu? Olmalı. – aattia

+0

@aattia, MoveNext yöntemi bir adım ilerletmenin yoludur. Diğer kod, bunun bir istisna atarak gerçekleşmesini engeller. Bir istisna atar bir numaralayıcı, IEnumerable kullanımlarının% 99'u tarafından kullanılamayacağı için temel olarak kırılır. "Yineleyici zaten bozuksa, lütfen yine de adım atınız" yazan bir yöntem eklemenin çok az değeri vardır. – JaredPar