Verifique se o elemento na posição [x] existe na lista

88

Se eu tiver uma lista de strings

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

e eu quero saber se, por exemplo, a posição 2 do índice contém um elemento, há uma maneira simples de fazer isso sem contar o comprimento da lista ou usando um try catch?

Como isso vai falhar, posso contornar com um try catch, mas isso parece excessivo

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

Respostas:

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

ElementAtOrDefault () faz parte do System.Linqnamespace.

Embora você tenha uma lista, então você pode usar list.Count > 2.

Yuriy Faktorovich
fonte
4
Mais rápido de ler do que a verificação normal .Count, mas observe que os itens "nulos" são teoricamente válidos dentro da lista, portanto, não conte com isso para lançar uma exceção se o teste não for satisfeito.
AFract
1
Você pode usar o ?? operador ie. list.ElementAtOrDefault(2)??defaultvalue
George Kargakis
12
if (list.Count > desiredIndex && list[desiredIndex] != null)
{
    // logic
}
Anthony Pegram
fonte
5
mesmo se list.Count> desejadoIndex for satisfeito, a recuperação do elemento lançará uma exceção se o índice <0
AFract
2
bem, isso é picuinhas. desejadoIndex provavelmente será um número positivo. Se essa não for uma afirmação confiável, basta adicionar desejadoIndex> -1 ..
SubjectX
@SubjectX - Não criticar. É comum usar um índice retornado por IndexOfque pode ser -1
Kyle Delaney
0
int? here = (list.ElementAtOrDefault(2) != 0 ? list[2]:(int?) null);
InGeek
fonte
1
Respostas apenas em código são desencorajadas porque não explicam como resolvem o problema. Atualize sua resposta para explicar como isso melhora as outras respostas aceitas e votadas nesta pergunta já. Além disso, esta pergunta tem 7 anos, seus esforços seriam mais apreciados por usuários que têm perguntas recentes sem resposta. Reveja Como escrevo uma boa resposta .
FluffyKitten de