我有一个有趣的问题.根据MSDN yield 语法:
yield return <expression>; // yield some value
yield break; // exiting from iterator
Run Code Online (Sandbox Code Playgroud)
为什么不呢:
yield <expression>; // yield some value
return; // exiting from iterator
Run Code Online (Sandbox Code Playgroud)
对我来说,第二种形式不那么冗长,仍然具有与第一种形式相同的含义.所以问题是 - 为什么.NET设计者选择了第一种形式?可能是什么原因造成的?第二种形式有哪些潜在的设计问题?
不使用yield本身的主要原因是它会引入一个新关键字,并且在处理旧代码时可能会破坏向后兼容性.
正因为如此,C#语言团队决定将yield作为一个上下文关键字(它只是一个关键字,后面跟着return
或break
).
请考虑以下代码:
yield variable;
Run Code Online (Sandbox Code Playgroud)
yield可以是a class
或a 的名称,struct
而这个语句冷是一个变量声明.
使用像C#这样易于编写和维护的复杂语言,您希望语句只有一个含义.如果return
根据你是否在迭代器中做了不同的事情,你可能会严重限制语言.
http://blogs.msdn.com/b/ericgu/archive/2006/03/08/546296.aspx