从我读到的来看,

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(C#reference)

  

yield关键字使用的是所谓的   懒惰的评价。这意味着什么   实际上就是以下任何事情   a <!> quot; yield return <!> quot;不会被评估   直到它被要求   枚举器。

另请参阅Eric Lippert关于Iterator Blocks的博客。
第1部分
第2部分 - 为什么没有参考或输出参数
第3部分 - 为什么最终没有收益
第4部分 - 为什么没有捕获产量
第5部分 - Push vs Pull
第6部分 - 为什么没有不安全的代码

它有效是因为 yield return 返回一个值到枚举器对象,基本上为您自动化一些管道代码(即它是语法糖)。它不会导致方法返回,那就是 yield break.

更多信息:

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top