Tôi nhận ra đây là một câu hỏi cũ (trước Jon Skeet?) Nhưng tôi đã tự xem xét câu hỏi này gần đây. Thật không may các câu trả lời hiện tại ở đây (theo ý kiến của tôi) không đề cập đến lợi thế rõ ràng nhất của tuyên bố lợi nhuận.
Lợi ích lớn nhất của tuyên bố lợi nhuận là nó cho phép bạn lặp qua các danh sách rất lớn với việc sử dụng bộ nhớ hiệu quả hơn nhiều khi sử dụng danh sách tiêu chuẩn.
Ví dụ: giả sử bạn có truy vấn cơ sở dữ liệu trả về 1 triệu hàng. Bạn có thể lấy tất cả các hàng bằng cách sử dụng một DataReader và lưu trữ chúng trong một List, do đó yêu cầu list_size * row_size byte của bộ nhớ.
Hoặc bạn có thể sử dụng báo cáo lợi nhuận để tạo Iterator và chỉ lưu trữ một hàng trong bộ nhớ tại một thời điểm. Thực tế điều này mang lại cho bạn khả năng cung cấp khả năng "truyền trực tuyến" trên nhiều tập dữ liệu.
Hơn nữa, trong mã sử dụng Iterator, bạn sử dụng vòng lặp foreach đơn giản và có thể quyết định tách ra khỏi vòng lặp theo yêu cầu.Nếu bạn phá vỡ sớm, bạn không buộc phải truy xuất toàn bộ tập dữ liệu khi bạn chỉ cần 5 hàng đầu tiên (ví dụ).
Về:
Ideally some problem that cannot be solved some other way
tuyên bố Lợi tức không cung cấp cho bạn bất cứ điều gì bạn không thể làm được sử dụng riêng thực hiện tùy chỉnh iterator của bạn, nhưng nó giúp bạn tiết kiệm cần phải viết mã thường phức tạp cần thiết. Có rất ít vấn đề (nếu có) không thể giải quyết nhiều hơn một cách.
Dưới đây là một vài câu hỏi nhiều hơn gần đây và câu trả lời mà cung cấp chi tiết hơn:
Yield keyword value added?
Is yield useful outside of LINQ?