イテレータブロックのyield
外部で使用しても問題ありません。これは、コンテキストキーワードとして使用されていないことを意味します。
例えば:
// No idea whether this is financially correct, but imagine it is :)
decimal yield = amountReturned / amountInvested;
その時点では、コンテキストキーワードではなく(「完全な」キーワードになることはありません)、単なる識別子です。通常の明快さの観点から明らかに最良の選択でない限り、とにかくそれを使用しないようにしますが、時々そうなるかもしれません。
yield return
とのコンテキストキーワードとしてのみ使用できますyield break
。これは、イテレータブロックでのみ有効です。(これらは、メソッドをイテレーターに変えるものです。)
編集:あなたの「これは許されるべきか」という質問に答えるために...はい、そうすべきです。yield
そうしないと、C#2がリリースされたときに、識別子として使用されていた既存のC#1コードがすべて無効になってしまいます。注意して使用する必要があります。C#チームは、実際にはあいまいにならないようにしていますが、有効であることは理にかなっています。
「from」、「select」、「where」など、他の多くのコンテキストキーワードについても同じことが言えます。これらが識別子にならないようにしますか?