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