devterview_$ iniciar simulação

Retornar `IEnumerable<T>` x `List<T>` x `IReadOnlyList<T>`

MédioSêniorDesign de API

Pergunta

Qual tipo você expõe no retorno de um método que devolve uma coleção em C#, e por que importa?

Resposta esperada

Expor `List<T>` num retorno público vaza detalhe de implementação e dá ao chamador poder de mutar a coleção interna (`.Add`, `.Clear`), além de te prender a `List` pra sempre. `IEnumerable<T>` é o mais abstrato — só permite iterar — mas carrega a armadilha da avaliação diferida: se por baixo é uma query LINQ preguiçosa, cada `foreach` reexecuta, e o chamador não sabe. `IReadOnlyList<T>` / `IReadOnlyCollection<T>` comunicam 'já materializado, você pode contar e indexar, mas não mexer' — geralmente a melhor escolha pra um retorno, devolvendo um `.ToList()` por trás. Regra: `IEnumerable<T>` pra streams/pipelines onde a preguiça é intencional e documentada; `IReadOnlyList<T>` pra 'aqui está a coleção pronta'; nunca `List<T>` público a menos que a mutabilidade seja o contrato.

Por que perguntam isso

Pergunta pleno/sênior de C#. Conecta com a pergunta de LINQ lazy. Sinal bom: a armadilha do `IEnumerable` lazy no retorno.

#ienumerable#ireadonlylist#design-de-api#encapsulamento
publicidade

Relacionadas