2009-07-30 88 views
2

从我读过,NerdDinner示例的Dinner.GetRuleViolations函数如何返回一个列表?

yield return <value> 

跳出函数的执行行的时刻。然而,斯科特·格思里的文字表示

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"); 

列表如何工作的呢?

回答

6

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

0

它的工作原理是yield return为枚举器对象返回一个值,基本上为您自动化一些管道代码(即它是语法糖)。它不会导致该方法返回,那将是yield break

的更多信息:

相关问题