ExpertiDict

C# · Intermediário · Inglês · Técnico

deferred execution

/dɪˈfɝd ˌɛksɪˈkjuʃən/substantivo

Comportamento do LINQ em que a consulta só é executada quando o resultado é enumerado (foreach, ToList, Count), e não na linha em que ela é escrita.

Onde usar

Aparece em bugs em que a lista 'mudou sozinha' ou a consulta rodou duas vezes. Materializar com ToList quando precisar de um retrato estável evita enumerações repetidas.

Em código

var nums = new List<int> { 1, 2, 3 };
var q = nums.Where(n => n > 1);
nums.Add(4);
Console.WriteLine(q.Count()); // 3

Exemplos

That's deferred execution, the query hasn't run yet.

Isso é deferred execution, a consulta ainda não rodou.

Call ToList to stop the deferred execution from repeating.

Chame ToList para a deferred execution não se repetir.

Cuidado

Não presuma que var q = lista.Where(...) já filtrou: q é só a definição da consulta e reflete mudanças feitas em lista antes de enumerar.

Sinônimos

execução adiada, lazy evaluation

Antônimos

execução imediata

Veja também

Todos os termos de C#