Pergunta

Pelo que tenho lido,

yield return <value> 

salta para fora da função do momento em que a linha é executada. No entanto, o texto de Scott Guthrie indica que

var errors = dinner.GetRuleViolations();

puxa com sucesso uma lista de todas as violações de regras mesmo que GetRuleViolations é uma longa lista de

if(String.someFunction(text))
    yield return new RuleViolation("Scary message");
if(String.anotherFunction(text))
    yield return new RuleViolation("Another scary message");

Como isso funciona?

Foi útil?

Solução

Ele não retorna uma lista. Ele retorna um IEnumerable<RuleViolation>. yield return retorna um valor em uma iteração método . Uma iteração é uma maneira fácil de gerar uma sequência de elementos de um método.

Outras dicas

rendimento (referência # C)

Os usos rendimento palavra-chave que é conhecido como avaliação preguiçosa. O que isto significa praticamente é que seguir qualquer coisa um "retorno de rendimento" não serão avaliadas até que seja solicitado ao recenseador.

Também dê uma olhada no blog de Eric Lippert no Iterator Blocks.
Parte 1
Parte 2 - Por que Não Ref ou os parâmetros
Parte 3 - por que não um rendimento em finalmente
Parte 4 - por que não um rendimento na captura
Parte 5 - Empurre vs Pull
parte 6 - Por que nenhum código inseguro

Ele funciona porque yield return retorna um valor a um objeto enumerador, basicamente, automatizar alguns código de canalização para você (ou seja, é o açúcar sintática). Ele não causa o método de retorno, que seria yield break.

Mais informações:

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top