Compruebe si el elemento en la posición [x] existe en la lista


88

Si tengo una lista de cadenas

List<String> list = new list<String>();
list.add("str1");
list.add("str2");
list.add("str3");

y quiero saber si, por ejemplo, la posición del índice 2 contiene un elemento, ¿hay una forma sencilla de hacer esto sin contar la longitud de la lista o usar un try catch?

Como esto fallará, puedo solucionarlo con un intento de captura, pero esto parece excesivo

if(list.ElementAt(2) != null)
{
   // logic
}

Respuestas:


216
if(list.ElementAtOrDefault(2) != null)
{
   // logic
}

ElementAtOrDefault () es parte del System.Linqespacio de nombres.

Aunque tienes una lista, puedes usar list.Count > 2.


4
Más rápido de leer que la comprobación .Count normal, pero tenga en cuenta que los elementos "nulos" son teóricamente válidos dentro de la lista, así que no confíe en esto para lanzar una excepción si la prueba no se cumple.
AFract

1
Puede utilizar el ?? operador es decir. list.ElementAtOrDefault(2)??defaultvalue
George Kargakis

12
if (list.Count > desiredIndex && list[desiredIndex] != null)
{
    // logic
}

5
incluso si se satisface list.Count> desireIndex, la recuperación del elemento arrojará una excepción si index <0
AFract

2
bueno, eso es quisquilloso. deseadoIndex probablemente será un número positivo. Si esa no es una afirmación confiable, simplemente agregue deseadoIndex> -1 ..
SubjectX

@SubjectX - No es quisquilloso. Es común usar un índice devuelto por el IndexOfcual puede ser -1
Kyle Delaney

0
int? here = (list.ElementAtOrDefault(2) != 0 ? list[2]:(int?) null);

1
Las respuestas de solo código no se recomiendan porque no explican cómo resuelven el problema. Actualice su respuesta para explicar cómo esto mejora las otras respuestas aceptadas y con voto positivo que esta pregunta ya tiene. Además, esta pregunta tiene 7 años, sus esfuerzos serían más apreciados por los usuarios que tienen preguntas recientes sin respuesta. Por favor revise ¿Cómo escribo una buena respuesta ?
FluffyKitten
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.