Eu costumava trabalhar em uma equipe em que o LINQ era ligeiramente desagradável porque era supostamente difícil depurar esse código. Tínhamos um acordo: após cada cadeia LINQ, o desenvolvedor cria uma variável local para a qual ele escreve o resultado de ToArray (). Se a matriz é necessária mais abaixo no método ou se só funciona com IEnumerable. Antes do retorno, o resultado também foi lançado em uma matriz, parece que não havia métodos em toda a base de código que retornou ou aceitou uma coleção diferente de uma matriz.
Legado barbudo! - você vai pensar e terá razão. No entanto, apesar do fato de que muitos anos se passaram desde que o LINQ se tornou onipresente e os IDEs permitem que você visualize os dados na depuração, alguns desenvolvedores ainda têm uma ideia ruim dos critérios para escolher um tipo de aceitação e retorno quando se trata de coleções.

Para começar, qual é a coleção? Uma vez que BCL possui um tipo de dados com o mesmo nome, é importante entender que uma coleção é um tipo de dados projetado para operar em um grupo de elementos que possuem alguma característica comum (tipo de dados). Portanto, tudo o que pode ser enumerado é uma coleção.
Prefira abstrações
, , . , . , . , , .
Lazy loading
- ( IEnumerable) , . IList, , . , lazy loading, — . . , 'Lazy' , , .
IReadOnlyCollection
, , IArray, IReadOnlyCollection, -.
namespace System.Collections.Generic
{
public interface IReadOnlyCollection : IEnumerable, IEnumerable
{
int Count { get; }
}
}- 4.5, read-only . Array, List, IList.
IEnumerable … , IReadOnlyCollection, List. , - List.
Array IReadOnlyCollection List, . IList .
null
, , , , , , , null. null, . - null 0 . 1 null, null, , . :
if(myEnumerable != null)
{
foreach(var item in myEnumerable)
{
}
} , :
foreach(var item in myEnumerable ?? Enumerable.Empty<T>())
{
}IEnumerable/ICollection/IList
, , :
IEnumerable | , -, |
IReadOnlyCollection : IEnumerable | -, |
ICollection : IEnumerable | , (IsReadOnly) |
IReadOnlyList : IReadOnlyCollection | , |
IList : ICollection | , |
, , . , . IEnumerable , - ICollection, IList… .
, , , . , , IReadOnlyCollection. IEnumerable , , , — -. lazy loading, IList ICollection, — read-only .
Web API HTTP
HTTP, , -. , , , IEnumerable IList.
, HTTP JSON - , . , (Newtonsoft.Json, System.Text.Json), List. \ - . IEnumerable response .
, , , , .
Eu ficaria feliz com as alterações e adições, recomendo que você se familiarize com as Diretrizes de design da estrutura para coleções .