Qual é a melhor maneira (levando em consideração a velocidade e a legibilidade) para determinar se uma lista está vazia? Mesmo se a lista for do tipo IEnumerable<T>
e não tiver uma propriedade Count.
Agora eu estou jogando entre isso:
if (myList.Count() == 0) { ... }
e isto:
if (!myList.Any()) { ... }
Meu palpite é que a segunda opção é mais rápida, pois retornará com um resultado assim que vir o primeiro item, enquanto a segunda opção (para um IEnumerable) precisará visitar todos os itens para retornar a contagem.
Dito isto, a segunda opção parece tão legível para você? Qual você prefere? Ou você pode pensar em uma maneira melhor de testar uma lista vazia?
A resposta do Edit @ lassevk parece ser a mais lógica, juntamente com um pouco de verificação de tempo de execução para usar uma contagem em cache, se possível, assim:
public static bool IsEmpty<T>(this IEnumerable<T> list)
{
if (list is ICollection<T>) return ((ICollection<T>)list).Count == 0;
return !list.Any();
}
list.Any()
equivalente list.IsEmpty
? O método de estrutura deve ser otimizado - vale a pena escrever um novo somente se você descobrir que é um gargalo de desempenho.
IsEmpty
método de extensão. github.com/dotnet/corefx/issues/35054 Verifique e vote se quiser e concorda.
is
ecast
mas o usoas
enull
verificar:ICollection<T> collection = list as ICollection<T>; if (collection != null) return colllection.Count;