2010-07-07 7 views

Trả lời

11

Lợi nhuận lợi nhuận tự động tạo một điều tra viên cho bạn.

http://msdn.microsoft.com/en-us/library/9k7k7cf0.aspx

Vì vậy, bạn có thể làm điều gì đó như

//pseudo code: 

while(get_next_record_from_database) 
{ 
    yield return your_next_record; 
} 

Nó cho phép bạn nhanh chóng tạo ra một bộ sưu tập đối tượng (một Enumerator) mà bạn có thể lặp qua và lấy hồ sơ. Bản khai trả về lợi tức xử lý tất cả mã cần thiết để tạo một điều tra viên cho bạn.

Phần lớn của báo cáo trả lại lợi nhuận là bạn không phải tải tất cả các mục trong bộ sưu tập trước khi trả lại bộ sưu tập cho phương thức gọi. Nó cho phép lazy loading của bộ sưu tập, vì vậy bạn không phải trả tiền phạt truy cập cùng một lúc.

Khi nào sử dụng Yield Return.

1

yield được sử dụng làm đường cú pháp để trả về đối tượng IEnumerable<T> hoặc IEnumerator<T> từ phương thức mà không phải triển khai lớp của riêng bạn triển khai các giao diện này.

+0

?? Tại sao các downvotes? Tôi có sai không? – spoulson

+0

Có, bởi vì nó khác với việc tạo ra IEnumerable chính mình và trả lại nó. –

+2

Không có gì sai về câu trả lời này. –

0

yield cho phép bạn phát ra một IEnumerable nơi bạn thường trở lại một loại cụ thể hơn (như một IList).

This is a pretty good example of how it can simplify your code and clarify your intent. Đối với nơi bạn sẽ sử dụng nó, bất cứ nơi nào trên các trang của bạn mà bạn cần phải lặp qua một bộ sưu tập bạn có khả năng có thể sử dụng một phương thức trả về một IEnumerable thay cho một List/Dictionary/etc.

4

Lợi nhuận là nhiều hơn so với đường cú pháp hoặc các cách dễ dàng để tạo IEnumerables.

Để biết thêm thông tin, tôi muốn xem blog của Justin Etherage có số has a great article explaining more advanced usages of yield.

+0

Tuyệt đối. Bạn không thể hoàn toàn đánh giá cao 'năng suất' cho đến khi bạn hiểu chính xác cách nó tạo ra máy trạng thái cho bạn. Nó cực kỳ mạnh mẽ. –

+0

Điều đó thật hữu ích. Tôi biết điều này là cũ nhưng bài đó thực sự đã làm cho tôi. – Terrance

1

Tôi đã viết một mẫu đơn giản cho thấy khối năng suất được gọi như thế nào trong một chu kỳ truy cập của bộ sưu tập. Kiểm tra xem nó ra here.