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
}
JGilmartin
fuente

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.

Yuriy Faktorovich
fuente
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
}
Anthony Pegram
fuente
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);
InGeek
fuente
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