LINQ contém

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 truese 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 na sourcesequência.
  • sourceé a sequência de entrada com o IEnumerable<T>tipo.
  • valueé o elemento a ser localizado na sequência de origem.

O Contains()método retorna truese a sourcesequência contém o elemento valueou falsenã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 sourcesequê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); // falseLinguagem 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);// falseLinguagem de código:  C#  ( cs )

Neste exemplo, usamos o Contains()método para verificar se a fruitslista contém a string cherrye mangorespectivamente.

O método retorna truefor cherryporque cherryestá presente na lista enquanto retorna falsefor mangoporque 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 Personobjetos 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 Personclasse 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 PersonComparerque compare dois Personobjetos 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 Personobjetos e um personobjeto para localizar na lista. O Contains()método verifica se a lista contém o personobjeto usando o PersonComparermétodo que compara dois personobjetos por seus SSN. O método retorna trueporque o personobjeto com o nome John Smithe 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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *