LINQ e tipos genéricos (C#)

As consultas LINQ são baseadas em tipos genéricos, que foram introduzidos na versão 2,0 do .NET Framework. Não é necessário um conhecimento profundo sobre os genéricos antes de começar a escrever consultas. No entanto, convém entender dois conceitos básicos:

  1. Quando você cria uma instância de uma classe de coleção genérica, como List<T>, substitua o "T" pelo tipo dos objetos que a lista bloqueia. Por exemplo, uma lista de cadeias de caracteres é expressa como List<string> e uma lista de objetos Customer é expressa como List<Customer>. Uma lista genérica é fortemente tipada e oferece muitos benefícios em coleções que armazenam seus elementos como Object. Se tentar adicionar um Customer em uma List<string>, você obterá um erro em tempo de compilação. É fácil usar coleções genéricas, porque você não precisa realizar a conversão de tipo em tempo de execução.

  2. A IEnumerable<T> é a interface que permite que as classes de coleção genérica sejam enumeradas usando a instrução foreach. Classes de coleção genéricas dão suporte a IEnumerable<T> do mesmo modo que classes de coleção não genéricas, tais como ArrayList, dão suporte a IEnumerable.

Para obter mais informações sobre os genéricos, consulte Genéricos.

Variáveis IEnumerable<T> em consultas LINQ

As variáveis de consulta LINQ são digitadas como IEnumerable<T> ou um tipo derivado, como IQueryable<T> . Ao se deparar com uma variável de consulta que é tipada como IEnumerable<Customer>, significa apenas que a consulta, quando for executada, produzirá uma sequência de zero ou mais objetos Customer.

IEnumerable<Customer> customerQuery =
    from cust in customers
    where cust.City == "London"
    select cust;

foreach (Customer customer in customerQuery)
{
    Console.WriteLine(customer.LastName + ", " + customer.FirstName);
}

Para obter mais informações, consulte Relacionamentos de tipo em operações de consulta LINQ.

Permitir que o compilador manipule as declarações de tipo genérico

Se preferir, poderá evitar a sintaxe genérica, usando a palavra-chave var. A palavra-chave var instrui o compilador a inferir o tipo de uma variável de consulta, examinando a fonte de dados especificada na cláusula from. O exemplo a seguir produz o mesmo código compilado que o exemplo anterior:

var customerQuery2 =
    from cust in customers
    where cust.City == "London"
    select cust;

foreach(var customer in customerQuery2)
{
    Console.WriteLine(customer.LastName + ", " + customer.FirstName);
}

A palavra-chave var é útil quando o tipo da variável for óbvio ou quando não é tão importante especificar explicitamente os tipos genéricos aninhados, como aqueles que são produzidos por consultas de grupo. É recomendável que você note que o código poderá se tornar mais difícil de ser lido por outras pessoas, caso você use a var. Para obter mais informações, consulte Variáveis locais de tipo implícito.

Confira também