Resumo : neste tutorial, você aprenderá como usar o Contains()
método LINQ para verificar se uma sequência contém um elemento específico.
Introdução ao método LINQ Contains()
O Contains()
é um método de extensão LINQ que retorna true
se uma sequência contém um elemento:
bool Contains<TSource>(
this IEnumerable<TSource> source,
TSource value
);
Linguagem de código: C# ( cs )
Nesta sintaxe:
TSource
é o tipo de elemento nasource
sequência.source
é a sequência de entrada com oIEnumerable<T>
tipo.value
é o elemento a ser localizado na sequência de origem.
O Contains()
método retorna true
se a source
sequência contém o elemento value
ou false
não.
Depois de Contains()
encontrar o valor na sequência de origem, ele para de enumerar a sequência imediatamente.
O Contains()
usa um comparador de igualdade padrão para comparar o valor com os elementos na sequência de origem.
O Contains()
método está disponível para todas as coleções que implementam a IEnumerable<T>
interface, incluindo List<T>
.
Se quiser usar um comparador de igualdade personalizado, você pode usar a seguinte sobrecarga de método:
bool Contains<TSource>(
this IEnumerable<TSource> source,
TSource value,
IEqualityComparer<TSource>? comparer
);
Linguagem de código: C# ( cs )
Nesta sintaxe, você pode passar um comparador de igualdade personalizado para o terceiro parâmetro do Contains()
método para comparar o valor com os elementos da source
sequência.
Exemplos de LINQ Contém()
Vejamos alguns exemplos de uso do Contains()
método LINQ.
1) Usando LINQ Contains() para verificar se um array contém um valor
O programa a seguir demonstra como usar o Contains()
método LINQ para verificar se um array contém um número inteiro específico:
using static System.Console;
int[] numbers = { 1, 2, 3, 4, 5 };
bool containsThree = numbers.Contains(3);
bool containsTen = numbers.Contains(10);
WriteLine(containsThree); // true
WriteLine(containsTen); // false
Linguagem de código: C# ( cs )
Neste exemplo, usamos o Contains()
método para verificar se o array de números contém os inteiros 3 e 10 respectivamente.
O método retorna verdadeiro para 3 porque está presente no array e falso para 10 porque não está disponível no array.
2) Usando LINQ Contains() para verificar se uma lista contém um valor
O programa a seguir ilustra como usar o Contains()
método LINQ para verificar se uma lista de strings contém uma string:
using static System.Console;
List<string> fruits = new(){
"apple",
"banana",
"cherry",
"strawberries"
};
bool containsCherry = fruits.Contains("cherry");
bool containsMango = fruits.Contains("mango");
WriteLine(containsCherry);// true
WriteLine(containsMango);// false
Linguagem de código: C# ( cs )
Neste exemplo, usamos o Contains()
método para verificar se a fruits
lista contém a string cherry
e mango
respectivamente.
O método retorna true
for cherry
porque cherry
está presente na lista enquanto retorna false
for mango
porque mango não está na lista.
3) Usando o método LINQ Contains() que usa um comparador de igualdade personalizado
O exemplo a seguir demonstra como usar o Contains()
método LINQ para verificar se uma pessoa está na lista de Person
objetos usando um comparador de igualdade personalizado:
// Define a custom Person class
class Person
{
public string? SSN { get; set; }
public string? Name { get; set; }
}
// Define a custom PersonComparer class that compares
// Person objects based on their SSN
class PersonComparer : IEqualityComparer<Person>
{
public bool Equals(Person? x, Person? y)
{
// Check for null values
if (x == null || y == null)
return false;
// Check if the two Person objects are the same reference
if (ReferenceEquals(x, y))
return true;
// Compare the SSN of the two Person objects
// to determine if they're the same
return x.SSN == y.SSN;
}
public int GetHashCode(Person? obj)
{
if (obj == null || obj.SSN == null)
return 0;
// Use the SSN of the Person object
// as the hash code
return obj.SSN.GetHashCode();
}
}
class Program
{
static void Main(string[] args)
{
// Create a List of Person objects
List<Person> people = new List<Person> {
new Person { SSN = "123-45-6789", Name = "John Smith" },
new Person { SSN = "987-65-4321", Name = "Jane Doe" },
new Person { SSN = "555-55-5555", Name = "Bob Johnson" }
};
// Create a Person object to check if it's present in the List
Person person = new() { SSN = "123-45-6789", Name = "John Smith" };
// Check if the List contains the Person object using a custom comparer
bool containsPerson = people.Contains(person, new PersonComparer());
if (containsPerson)
{
Console.WriteLine($"{person.Name} is present in the list of people.");
}
else
{
Console.WriteLine($"{person.Name} is not present in the list of people.");
}
Console.ReadLine();
}
}
Linguagem de código: C# ( cs )
Saída:
John Smith is present in the list of people.
Linguagem de código: C# ( cs )
Como funciona.
Primeiro, defina uma Person
classe que possua duas propriedades: Número de Segurança Social ( SSN
) e Name
:
class Person
{
public string? SSN { get; set; }
public string? Name { get; set; }
}
Linguagem de código: C# ( cs )
Segundo, defina uma classe personalizada PersonComparer
que compare dois Person
objetos com base em SSN
:
class PersonComparer : IEqualityComparer<Person>
{
public bool Equals(Person? x, Person? y)
{
// Check for null values
if (x == null || y == null)
return false;
// Check if the two Person objects are the same reference
if (ReferenceEquals(x, y))
return true;
// Compare the SSN of the two Person objects
// to determine if they're the same
return x.SSN == y.SSN;
}
public int GetHashCode(Person? obj)
{
if (obj == null || obj.SSN == null)
return 0;
// Use the SSN of the Person object
// as the hash code
return obj.SSN.GetHashCode();
}
}
Linguagem de código: C# ( cs )
Terceiro, crie uma lista que contenha três Person
objetos e um person
objeto para localizar na lista. O Contains()
método verifica se a lista contém o person
objeto usando o PersonComparer
método que compara dois person
objetos por seus
. O método retorna SSN
true
porque o person
objeto com o nome John Smith
e SSN
"123-45-5555"
está na lista:
class Program
{
static void Main(string[] args)
{
// Create a List of Person objects
List<Person> people = new List<Person> {
new Person { SSN = "123-45-6789", Name = "John Smith" },
new Person { SSN = "987-65-4321", Name = "Jane Doe" },
new Person { SSN = "555-55-5555", Name = "Bob Johnson" }
};
// Create a Person object to check if it's present in the List
Person person = new() { SSN = "123-45-6789", Name = "John Smith" };
// Check if the List contains the Person object using a custom comparer
bool containsPerson = people.Contains(person, new PersonComparer());
if (containsPerson)
{
Console.WriteLine($"{person.Name} is present in the list of people.");
}
else
{
Console.WriteLine($"{person.Name} is not present in the list of people.");
}
Console.ReadLine();
}
}
Linguagem de código: C# ( cs )
Resumo
- Use o
Contains()
método para verificar se uma sequência contém um elemento usando um comparador de igualdade.