Trong C #, bạn có thể xây dựng các phương thức với kiểu trả về IEnumerable<T>
và sử dụng yield return
và yield break
để điều khiển luồng. Đây là một ví dụ đơn giản sử dụng cả hai điều khiển:
public IEnumerable<int> GetEvens(int start, int end) {
if(end < start)
yield break;
if(start & 2 != 0)
start++;
for(int i = start; i <= end; i+=2) {
yield return i;
}
}
Câu hỏi của tôi là, tại sao ban đầu nó được thiết kế để sử dụng hai từ khóa yield
và không sử dụng nó như sau với yield
"giá trị trả về" duy nhất :
public IEnumerable<int> GetEvens(int start, int end) {
if(end < start)
return; // stop completely and return nothing
if(start & 2 != 0)
start++;
for(int i = start; i <= end; i+=2) {
yield i; // yield the current value.
}
}
Đối với tôi, điều này là đơn giản để đọc và hiểu.
yield x;
cũng không phải là một lỗi cú pháp?