NerdDinnerサンプルのDinner.GetRuleViolations関数はどのようにリストを返しますか?
-
05-07-2019 - |
質問
読んだものから、
yield return <value>
行が実行された瞬間に関数から飛び出します。ただし、Scott Guthrieのテキストは次のことを示しています
var errors = dinner.GetRuleViolations();
GetRuleViolationsは長いリストであるにもかかわらず、すべてのルール違反のリストを正常に引き出します
if(String.someFunction(text))
yield return new RuleViolation("Scary message");
if(String.anotherFunction(text))
yield return new RuleViolation("Another scary message");
これはどのように機能しますか
解決
リストを返しません。 IEnumerable<RuleViolation>
を返します。 yield return
はイテレータメソッド。イテレータは、メソッド内の要素のシーケンスを生成する簡単な方法です。
他のヒント
を参照
yieldキーワードは、 怠evaluationな評価。これが意味すること 実質的には以下のことです <!> quot; yield return <!> quot;評価されません から要求されるまで 列挙子。
イテレータブロックに関するEric Lippertのブログもご覧ください。
パート1
パート2-参照または出力パラメーターがない理由
パート3-最終的に収益が得られない理由
パート4-漁獲量が減る理由
パート5 -プッシュvsプル
パート6-安全でないコードがない理由
機能するのは、yield return
が列挙子オブジェクトに値を返し、基本的に配管コードを自動化するためです(つまり、シンタックスシュガー)。メソッドが戻ることはなく、yield break
になります。
詳細:
所属していません StackOverflow