NerdDinner示例的Dinner.GetRuleViolations函数如何返回列表?

Zia*_*hoy 2 c# asp.net-mvc yield-return nerddinner

从我读过的,

yield return <value> 
Run Code Online (Sandbox Code Playgroud)

在执行该行的那一刻跳出函数.然而,Scott Guthrie的文字表明了这一点

var errors = dinner.GetRuleViolations();
Run Code Online (Sandbox Code Playgroud)

成功提取所有规则违规的列表,即使GetRuleViolations是一个很长的列表

if(String.someFunction(text))
    yield return new RuleViolation("Scary message");
if(String.anotherFunction(text))
    yield return new RuleViolation("Another scary message");
Run Code Online (Sandbox Code Playgroud)

这是如何运作的?

Meh*_*ari 6

它不会返回列表.它返回一个IEnumerable<RuleViolation>.yield return返回迭代器方法中的值.迭代器是一种在方法中生成元素序列的简单方法.