¿Cómo puedo saber si mi lista contiene un solo artículo sin Count
o Single
?Pruebe si un IEnumerable <T> contiene 1 elemento sin contar o usando Single
víctima eventual de Efficient Linq Enumerable's 'Count() == 1' test
¿Cómo puedo saber si mi lista contiene un solo artículo sin Count
o Single
?Pruebe si un IEnumerable <T> contiene 1 elemento sin contar o usando Single
víctima eventual de Efficient Linq Enumerable's 'Count() == 1' test
¿Qué tal esto:
int limitedCount = myEnumerable.Take(2).Count();
qué le dará:
... pero le da esas respuestas mientras solo itera sobre la secuencia una vez. Luego puedes encender los resultados.
en lugar de utilizar la excepción, a través del bucle de enumerables y tan pronto como se golpeó más de 1, salir de ella.
Usted no tiene que contarlos todos ... sólo 2 de ellos :)
Además, el uso de excepciones para el control de flujo es una mala idea porque su realmente costoso desde el punto de vista del rendimiento .
Como muestra la respuesta de @ Jon Skeet, hay mejores maneras de hacer esto ya que la interfaz IEnumerable está tan bien diseñado. Si no tuviera los métodos .Skip
y .Any()
, sin embargo (que se aplicaría a otros idiomas o lugares en los que sólo iterando simplemente), sólo tiene que contar hasta 2.
eso es exactamente lo que 'Saltar (1) .Cualquier()' va a hacer - pero utilizando los métodos incorporados requiere mucho menos código :) –
@ Jon Skeet - He estado en Java tierra demasiado largo y no estaba recordando la API IEnumerable. Acabo de utilizar la lógica básica, que también se aplica a otros lenguajes (como Java) que pueden no tener una interfaz tan agradable como IEnumerable. Aunque eres muy correcto ... menos código es mejor. – cdeszaq
No es realmente IEnumerable: son los métodos de extensión Enumerable. Puede escribir esos en Java también, por supuesto, aunque no como métodos de extensión. –
myEnumerable.Take(2).Count() < 2
Lo tenía allí, así que puedo ver la diferencia entre una secuencia vacía y una que tiene más de una. En mi código compruebo primero! Any() y manejo el caso vacío, y luego necesito manejar el más de un caso (con el código que tienes arriba). – Ray
O para decirlo de otra manera, esta respuesta me dice si tengo 0 o más de 1. No si solo tengo más de uno. – Ray
@Ray: No está claro a qué te refieres ... ¿estás diciendo que tu pregunta es, básicamente, preguntarte algo equivocado? Solo * pidió * si una secuencia contiene más de un elemento, que es lo único que le dice mi respuesta. Si desea * tres * resultados posibles diferentes, el código sería un poco diferente - se editará con una respuesta para eso. –