局部变量可以命名为yield

时间:2013-03-22 17:10:03

标签: c# yield-return

刚刚找到

foreach (int yield in items) {
  yield return yield * 2;
}

int yield = 10; 

是C#中的有效代码。

我可以理解,编译器可以很容易地区分变量yield和迭代器yield,但它仍然会增加混淆并降低代码的可读性。

我们是否知道允许的确切原因?

2 个答案:

答案 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

它不会很好,是吗?在使用较新版本编译变量之前,必须重命名变量。