Verificando se um elemento exista na lista. (C#/.NET)

Overview
Olá, entusiastas de programação! No post de hoje, você vai aprender uma dica valiosa para qualquer desenvolvedor C#: como verificar se um elemento específico existe em uma lista. Vou te mostrar, de maneira descomplicada, mas detalhada, os passos utilizando métodos bem práticos como o IndexOf e Linq. Além disso, vamos dar uma olhada em como aplicar a mesma lógica em vetores, e qual seria a melhor abordagem em termos de performance. Preparado para tornar seus códigos ainda mais eficientes? Vamos lá!
Neste post mostro como verificar se um elemento existe em uma lista (List<T>). A forma é simples, mas é exclusiva para as listas. (Apesar de que, tem como fazer a mesma coisa com vetores também, só não é eficaz em termos de performance…)
Para este exemplo, considere a lista abaixo:
1var myStrList = new List<string> { "foo", "bar", "bacon", "egg" };
Utilizando IndexOf…
Agora queremos ver se as strings "bacon" e "salad" existem na lista myStrList…
1var indexBacon = myStrList.IndexOf("bacon");
2var indexSalad = myStrList.IndexOf("salad");
No código acima, a variável indexBacon vai receber o valor 2 (que é a posição da string bacon na lista) e a variável indexSalad vai receber -1, pois esta string não consta na lista.
Sendo assim, podemos utilizar o metodo acima para verificar se um determinado elemento existe ou não na lista…
1//Search for bacon
2var search = "bacon";
3
4if (myStrList.IndexOf(search) >= 0)
5 //Element found in list.
6 Console.WriteLine("Exists!");
7else
8 //Element not found in list.
9 Console.WriteLine("Not found!");
Neste código temos o exemplo de como verificar. Se o retorno da função IndexOf for maior que ou igual a zero (pois o C# é base zero), então o item existe. Se retornar -1, não existe.
Mas e se você possuir um vetor (array) ao invés de lista?
1var myIntArr = new int[] { 13, 23, 33, 42, 53, 63, 73 };
2var posOf42 = myIntArr.ToList().IndexOf(42);
Para utilizar esta mesma lógica em um vetor, primeiro você precisará convertê-lo para lista. Todavia, imagino que esta não seja uma opção muito boa em termos de performance, especialmente se você estiver com uma lista muito grande.
Utilizando Linq…
De forma alternativa, você também pode utilizar o Linq para descobrir se o elemento existe na lista.
1var searchBacon = myStrList.Where(item => item == "bacon").FirstOrDefault();
2var searchSalad = myStrList.Where(item => item == "salad").FirstOrDefault();
No código acima, a variável searchBacon possui o valor "bacon", pois este elemento existe na lista e você o selecionou (usando linq). Já a variável searchSalad está definida como null, pois o elemento não existe.
Para este caso, como o tipo de resposta é diferente, podemos padronizar utilizando um operador ternário:
1var found = (myStrList.Where(item => item == "bar").FirstOrDefault() != null) ? 1 : -1;
Com esta expressão, se o item for encontrado, a variável found vai receber o valor 1. Caso contrário, receberá -1.
Espero ter ajudado!