5

ちょうどわかった

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

また

int yield = 10; 

は C# で有効なコードです。

コンパイラーが変数の利回りとイテレーターの利回りを区別するのは簡単かもしれないことは理解できますが、それでも混乱を招き、コードの可読性を低下させます。

許可されている正確な理由を知っていますか?

4

2 に答える 2

18

それが許可されている正確な理由を知っていますか?

はい。コンテキストキーワードyieldにすぎません。これはC#2で導入されたものであり、チームはすでに識別子として使用されているコードを壊したくありませんでした。yield

同じことが、1.0以降に導入された他のコンテキストキーワードにも当てはまりますpartial。完全なリストについては、EricLippertのブログ投稿を参照してください。

しかし、それでも混乱が増し、コードの可読性が低下します

それで、それをしませんか?コードを本当に読みにくくするためにできることはいくつもあります。すべての変数名をアンダースコアにすることができます。

private int _;
private string __;
// etc

あなたはそれを行うのですか?yieldそうでない場合、なぜ人々が具体的に紛らわしいコードを書くことを期待するのでしょうか?

于 2013-03-22T17:12:23.890 に答える
2

yieldコンテキストキーワードです。それは普通のキーワードかもしれませんが、彼らはそれを文脈上のキーワードにすることを選びました。

コンテキストキーワードの主な理由は、下位互換性です。言語に通常のキーワードを追加すると、古いバージョンの言語からコピーされているコードが破損する可能性があります。

たとえばyield、通常のキーワードとして追加された後にこのコードをコンパイルすることを想像してみてください。

bool yield = false;
// bla bla

うまくいきませんね。新しいバージョンでコンパイルする前に、変数の名前を変更する必要があります。

于 2013-03-22T17:13:48.590 に答える