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
}

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.


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
}

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);

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.