才发现
foreach (int yield in items) {
yield return yield * 2;
}
或者
int yield = 10;
是 C# 中的有效代码。
我可以理解编译器很容易区分变量 yield 和迭代器 yield,但它仍然增加了混乱并降低了代码的可读性。
我们知道允许它的确切原因吗?
才发现
foreach (int yield in items) {
yield return yield * 2;
}
或者
int yield = 10;
是 C# 中的有效代码。
我可以理解编译器很容易区分变量 yield 和迭代器 yield,但它仍然增加了混乱并降低了代码的可读性。
我们知道允许它的确切原因吗?
我们知道允许它的确切原因吗?
是的。yield
只是一个上下文关键字。它是在 C# 2 中引入的,团队不想破坏已经用作yield
标识符的代码。
从 1.0 开始引入的其他上下文关键字也是如此,例如partial
. 有关完整列表,请参阅Eric Lippert 的博客文章。
但它仍然增加了混乱并降低了代码的可读性
所以不要那样做?你可以做很多事情来让你的代码变得非常非常难以阅读。您可以将所有变量名都设为下划线:
private int _;
private string __;
// etc
你这样做吗?如果不是,您为什么希望人们yield
专门编写令人困惑的代码?
yield
是一个上下文关键字。它可能是一个普通的关键字,但他们选择将其设为上下文关键字。
上下文关键字的主要原因是向后兼容性。如果他们在语言中添加了普通关键字,则可能会破坏从旧版本语言复制的代码。
例如,想象一下在yield
添加为普通关键字之后编译此代码:
bool yield = false;
// bla bla
它不会很好地工作,不是吗?您必须先重命名变量,然后才能使用较新的版本对其进行编译。