Existe uma extensão LINQ ou (um conjunto sensível / eficiente de expressões LINQ) que determinam se uma coleção tem pelo menos elementos 'x'?

Eu tenho código que precisa saber que uma coleção não deve estar vazia ou conter apenas um item.

Em geral, quero uma extensão do formulário:

bool collectionHasAtLeast2Items = collection.AtLeast(2);

Eu posso escrever uma extensão facilmente, enumerando sobre a coleção e incrementando um indexador até atingir o tamanho solicitado, ou ficar sem elementos, mas já existe algo no framework LINQ que faria isso? Meus pensamentos (em ordem do que veio para mim) são:

bool collectionHasAtLeast2Items = collection.Take(2).Count() == 2; ou

bool collectionHasAtLeast2Items = collection.Take(2).ToList().Count == 2;

O que parece funcionar, embora o comportamento de pegar mais elementos do que a coleção contém não esteja definido (na documentação)Enumerable.Take Method, no entanto, parece fazer o que se esperaria.

Não é a solução mais eficiente, seja enumerando uma vez para pegar os elementos, depois enumerando novamente para contá-los, o que é desnecessário, ou enumerando uma vez para pegar os elementos, e então construindo uma lista para obter a propriedade count que não é enumeradora. -y, como eu realmente não quero a lista.

Não é bonito como eu sempre tenho que fazer duas asserções, primeiro pegando 'x', então verificando que eu realmente recebi 'x', e isso depende do comportamento não documentado.

Ou talvez eu possa usar:

bool collectionHasAtLeast2Items = collection.ElementAtOrDefault(2) != null;

No entanto, isso não é semanticamente claro. Talvez o melhor seja envolver isso com um nome de método que signifique o que eu quero. Estou assumindo que isso será eficiente, não refleti sobre o código.

Alguns outros pensamentos estão usandoLast(), mas eu explicitamente não quero enumerar toda a coleção.

Ou talvezSkip(2).Any(), novamente não semanticamente completamente óbvio, mas melhor queElementAtOrDefault(2) != null, embora eu achasse que eles produzem o mesmo resultado?

Alguma ideia?

questionAnswers(3)

yourAnswerToTheQuestion