Tôi cần vòng lặp for sẽ hoàn thành tất cả các lần lặp của nó ngay cả khi có bất kỳ ngoại lệ nào trong bất kỳ lần lặp nào.Làm thế nào xử lý một ngoại lệ trong một vòng lặp và tiếp tục lặp?
Trả lời
for (...)
{
try
{
// Do stuff
}
catch (Exception ex)
{
// Handle (or ignore) the exception
}
}
Mẹo hiệu suất, đặt các khai báo của bạn bên ngoài vòng lặp for. – freggel
@freggel: haha, cùng mẹo tôi muốn đưa ra. Nhưng đây là giải pháp tốt nhất. – user29964
Mẹo: vui lòng sử dụng Ngoại lệ được xác định chặt chẽ hơn sau đó Ngoại lệ cho biết ApplicationException. một vấn đề lớn với việc bắt ngoại lệ là ThreadAbortException sẽ bị bắt ở đây, bạn có thực sự muốn dừng ứng dụng dừng lại ở đây không? làm thế nào về việc bắt một OutOfMemoryException? –
Chỉ cần đặt mỗi lần lặp bên trong một try..catch
foreach(Person a in people)
{
try
{
WorkOnPerson(a);
}
catch
{
// do something if you want to.
}
}
Không có tính năng sẵn có trong một vòng lặp để làm điều đó. Đó là không có tính năng ngôn ngữ được xây dựng trong C# sẽ tự động xử lý một ngoại lệ và tiếp tục với một vòng lặp.
Cũng trong phạm vi có thể, vui lòng tránh đặt các khối cố gắng trong vòng lặp. Mặc dù nó giải quyết được vấn đề bạn đề cập đến, hãy xem xét rằng trình biên dịch & thời gian chạy phải thực hiện nhiều công việc bổ sung đó. Nếu không có ngoại lệ nào xảy ra thì tất cả sẽ lãng phí.
Thay vào đó, hãy để ngoại lệ là ngoại lệ. Đó là một cái gì đó xảy ra đặc biệt: bên ngoài những cân nhắc đầu vào được thiết kế của bạn. Tất nhiên, đây chỉ là một gợi ý, nếu bạn thực sự phải tiếp tục vòng lặp, hãy đi với hai tùy chọn được đề xuất ở trên.
Điều này là ... Giải pháp của bạn sẽ phải bao gồm vòng lặp for và một số loại quy trình xử lý lỗi/ngoại lệ, vì vậy bạn có thể phải nhúng câu lệnh try try trong vòng lặp for của bạn.
Nếu ngoại lệ được ném, không có cách nào bạn sẽ hoàn thành một lần lặp lại như bạn sẽ làm nếu ngoại lệ không được ném. Tuy nhiên bằng cách sử dụng một thử bắt bạn có thể chắc chắn rằng vòng lặp của bạn thực hiện tất cả những lần lặp mà không ném ngoại lệ.
Nếu bạn cần trợ giúp khi nhúng xử lý ngoại lệ trong vòng lặp for, chỉ cần sử dụng ví dụ được đăng bởi teedyay!
Hoặc, nếu đây là một mô hình lặp đi lặp lại trong chương trình của bạn, và bạn đang dùng các nguy cơ đánh bắt này tất cả các ngoại lệ kiểu, quấn nó như là một phần mở rộng bộ sưu tập của bạn. Áp dụng nó vào ví dụ trước:
people.ForEachIgnorant(ofThrowingWorkOnPerson);
Hoặc:
people.ForEachIgnorant(p => WorkOnPersonThatThrows(p));
Thực hiện:
public static void IgnorantForEach<T>(this IEnumerable<T> source, Action<T> action)
{
foreach (var item in source)
{
try
{
action(item);
}
catch { }
}
}
Tốt hơn, hãy thêm một đối số của kiểu 'Hành động
Tôi nghĩ nó cũng đáng chú ý là nếu bạn đang sử dụng một danh sách chung - bạn có thể sử dụng những điều sau đây để lặp lại bộ sưu tập:
ForEach (Hành động)
http://msdn.microsoft.com/en-us/library/bwabdf9z.aspx
EmployeesList.ForEach(ProcessEmployee);
void ProcessEmployee(Employee employeeItem)
{
try
{
...
}
catch { }
}
này có lợi ích của việc mã trong thể tái sử dụng vòng lặp của bạn.
Bạn có biết ngoại lệ là gì và điều gì sẽ gây ra nó? Bạn có thể kiểm tra cho nó và ngăn chặn nó được ném, tức là. CanCompleteStep hoặc TryCompleteStep. nếu bạn không thể hoàn thành chỉ cần bỏ qua bước đó. Sau đó bạn có thể đặt xử lý ngoại lệ ra khỏi vòng lặp.
- 1. Python: tiếp tục lặp cho vòng lặp ngoại lệ
- 2. Khuôn khổ thực thể; Làm thế nào để xử lý một ngoại lệ trong vòng lặp foreach và tiếp tục lặp lại
- 3. Tiếp tục thực hiện vòng lặp sau khi bắt một ngoại lệ trong try/catch
- 4. xử lý lỗi vba trong vòng lặp
- 5. Làm thế nào để có được trở lại với vòng lặp for sau khi xử lý ngoại lệ
- 6. lặp lại một vòng lặp cho vòng lặp
- 7. Break vòng lặp foreach bên trong và tiếp tục vòng lặp foreach bên ngoài
- 8. Java SWT: Quấn vòng lặp chính trong bộ xử lý ngoại lệ?
- 9. Sử dụng Tiếp tục trong vòng lặp while
- 10. Xử lý vòng lặp async Javascript
- 11. mục tiêu C cho vòng lặp ngắt và tiếp tục
- 12. C++, bỏ qua ngoại lệ và tiếp tục mã?
- 13. Python: Sử dụng tiếp tục trong một tuyên bố thử-cuối cùng trong một vòng lặp
- 14. MATLAB và xử lý trong vòng lặp for
- 15. Làm thế nào để tiếp tục trong các vòng lặp lồng nhau trong Python
- 16. Làm thế nào để viết một vòng lặp trong jQuery mà chờ đợi cho mỗi chức năng để hoàn thành trước khi tiếp tục vòng lặp
- 17. Python, lặp lại tiếp theo của vòng lặp qua một vòng lặp
- 18. làm thế nào để bỏ qua một vài lần lặp trong một vòng lặp trong Ruby?
- 19. Xử lý ngoại lệ AOP
- 20. Một vòng lặp 3,000,000,000 lặp cư xử kì lạ
- 21. Bắt ngoại lệ chết người và tiếp tục
- 22. Tiếp tục lặp lại trong C++ cho đến khi một số lặp cụ thể trong gdb
- 23. Xử lý nhiều ngoại lệ
- 24. Tôi nên xử lý giao tiếp giữa các luồng AI và vòng lặp trò chơi chính như thế nào?
- 25. Làm thế nào để viết vòng lặp trong một Makefile?
- 26. các vòng lặp trong khi tiếp tục và có và không có nhãn trong Java
- 27. Làm thế nào để xử lý các ngoại lệ về một chủ đề hành vi
- 28. STL điền và chuyển tiếp vòng lặp
- 29. Xử lý ngoại lệ Python trong danh sách hiểu
- 30. Làm thế nào để thoát ra khỏi vòng lặp chỉ khi một trường hợp nhất định được đáp ứng, nhưng sau đó tiếp tục lặp?
Điều này nghe có vẻ như một câu hỏi chai giày cũ so với chai thủy tinh: http://tinyurl.com/shoevbottle.Bạn có thể muốn cung cấp nhiều chi tiết hơn để có được các giải pháp tốt hơn bao gồm các ý tưởng bạn chưa cân nhắc. – Wedge
Wedge, tôi đồng ý ... nếu bạn phải đặt một thử/nắm bắt bên trong một vòng lặp for, như dưới đây, sau đó một cái gì đó có thể sai với các giải pháp. –
@Wedge: Ẩn dụ tuyệt vời, một dấu trang khác cho tôi, cảm ơn –