2011-09-16 17 views

Respuesta

25

¿Qué tal esto:

int limitedCount = myEnumerable.Take(2).Count(); 

qué le dará:

  • 0 si estaba vacía
  • 1 si tuviera exactamente 1 elemento
  • 2 si tuviera 2 o m elementos de mineral

... pero le da esas respuestas mientras solo itera sobre la secuencia una vez. Luego puedes encender los resultados.

+0

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

+0

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

+1

@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. –

-1

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.

+1

eso es exactamente lo que 'Saltar (1) .Cualquier()' va a hacer - pero utilizando los métodos incorporados requiere mucho menos código :) –

+0

@ 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

+2

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. –

2
myEnumerable.Take(2).Count() < 2 
Cuestiones relacionadas