2010-02-08 12 views
5

Có cách nào để tạo một trình vòng lặp được tạo ra tiếp tục đến mục tiếp theo khi một ngoại lệ xảy ra bên trong một trong các khối lặp không?Có cách nào để tạo ra một Iterator tạo lợi nhuận Tiếp tục đến mục tiếp theo khi có Ngoại lệ?

này hiện không làm việc:

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

Trả lời

3

Không không có. Mã được tạo cho trình lặp C# không hỗ trợ các ngoại lệ được ném ra. Nếu một ngoại lệ được ném, thao tác MoveNext sẽ không hoàn thành và cuộc gọi tiếp theo sẽ phát lại từ cùng một vị trí từ quan điểm của mã lặp được tạo.

+0

Không hẳn, một ngoại lệ ném bởi các điều tra viên sẽ đặt nó trong "liệt kê hoàn thành" tiểu bang. –

+0

Vì vậy, không có cách nào để làm cho nó tiến một bước? Nên có. – aattia

+0

@aattia, phương pháp MoveNext là cách để tiến một bước. Các mã khác ngăn chặn điều này xảy ra bằng cách ném một ngoại lệ. Một điều tra viên ném một ngoại lệ về cơ bản bị phá vỡ vì nó không thể sử dụng bởi 99% sử dụng IEnumerable. Có rất ít giá trị trong việc thêm một phương thức cho biết "nếu trình vòng lặp đã bị hỏng, vui lòng thực hiện bước". – JaredPar