Olá Pessoal, Vamos falar sobre Generics C#.
Atendendo a um pedido de um leitor que segue a série C# para iniciantes, faremos aqui uma abordagem simples para entender sobre o tal Generics 🙂
Os Generics (Genéricos) foram incluídos no .Net Framework na versão 2.0 (isso foi em 2005), portanto é novidade apenas para quem está começando agora, hoje em dia os Generics são fundamentais, então sugiro que entendam bem o conceito.
Os Generics foram criados para eliminar o “casting“, facilitar a criação de classes e métodos e diminuir a quantidade de boxing (entenda o que é boxing).
Genérics representa uma coleção (lista, array, como preferir…) de objetos fortemente tipados. Uma collection de generics fornece métodos para pesquisar, ordenar e manipular através de um índice.
Fortemente tipados, pois é uma coleção de um tipo, (int, string, etc… ou T), sendo “T” nesse caso um tipo definido pelo próprio programador.
Para utilizar o generics é necessário fazer uso do namespace System.Collections.Generic
Exemplo, uma lista de int:
List<int> listaInteiros = new List<int>();
Certo?
Agora dada a classe:
public class Pessoa
{
public string Nome { get; set; }
public int Idade { get; set; }
public string Sexo { get; set; }
// Construtor para facilitar a criação de uma nova pessoa.
public Pessoa(string nome, int idade, string sexo)
{
Nome = nome;
Idade = idade;
Sexo = sexo;
}
// Construtor vazio para permitir uma instância vazia da classe Pessoa
public Pessoa()
{
}
}
A classe Pessoa foi escrita pelo programador, não é um tipo do .Net, nesse caso para montar uma lista de N pessoas, seria assim:
// Criando uma lista do tipo pessoa.
List<Pessoa> listaPessoas = new List<Pessoa>();
// Adicionando novas pessoas na lista.
listaPessoas.Add(new Pessoa("Eduardo",30,"M"));
listaPessoas.Add(new Pessoa("Enzo", 7, "M"));
listaPessoas.Add(new Pessoa("Juliana", 21, "F"));
// Obtendo o total de pessoas na lista
int totalPessoas = listaPessoas.Count(); // totalPessoas = 3 pessoas
Fazendo a mesma coisa, só que de forma diferente:
// Criando uma lista do tipo pessoa.
List<Pessoa> listaPessoas = new List<Pessoa>();
// Criando um objeto pessoa vazio.
Pessoa pessoaTeste = new Pessoa();
// Preenchendo um objeto pessoa.
pessoaTeste.Nome = "Eduardo";
pessoaTeste.Idade = 30;
pessoaTeste.Sexo = "M";
// Adicionando a pessoa na lista.
listaPessoas.Add(pessoaTeste);
Escrevendo um método que recebe uma lista genérica de Pessoas e trabalha os dados da lista:
public static void MetodoAumentaIdade(List<Pessoa> listaPessoas)
{
foreach(Pessoa pessoa in listaPessoas)
{
// Aumenta 1 ano de idade.
pessoa.Idade++;
}
}
Estes exemplos mostraram como criar uma lista genérica.
Agora que sabemos como criar e popular uma lista genérica, vou dar alguns exemplos de como trabalhar dados em listas:
// Criando uma nova lista e ordenando por nome decrescente
List<Pessoa> novaListaPessoas;
novaListaPessoas = listaPessoas.OrderByDescending(x => x.Nome).ToList();
// Varrendo e exibindo nomes ordenados
novaListaPessoas.ForEach(n => Console.Write(n.Nome));
// Criando uma nova lista baseada em pessoas selecionadas por um critério
List<Pessoa> listaPessoaSelecionada =
(from Pessoa p in novaListaPessoas where p.Nome == "Eduardo"
select p).ToList();
// Somando todas as idades das pessoas da lista
int totalIdades = novaListaPessoas.Sum(x => x.Idade);
Notem que estou fazendo bastante uso de Expressões Lambdas.
Existem várias abordagens possíveis para trabalhar uma lista genérica, nesta documentação da Microsoft é possível estudar todas e aprender quando e de que forma podemos facilitar nosso trabalho utilizando Generics.
É isto pessoal, utilizem os comentários para participar ou tirar dúvidas.
Até mais 😉
Sim, é uma novidade, estou escrevendo apenas 9 dia depois da Microsoft ter 




