C# – Para Iniciantes – Parte 7 - Generics C# - Eduardo Pires
Postado em 16 de outubro de 2012 by Eduardo Pires
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>();
Agora dada a classe:
// Construtor para facilitar a criação de uma nova pessoa.
public Pessoa(string nome, int idade, string sexo)
Sexo = sexo;
// Construtor vazio para permitir uma instância vazia da classe 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 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"
// 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.
Publicado em .NET, C#, Iniciantes por Eduardo Pires. Marque Link Permanente.
25 ideias sobre "C# – Para Iniciantes – Parte 7 – Generics C#"
Marcos Takeo em 16 de outubro de 2012 às 09:35 disse:
Legal, você explicou tão bem que ficou dificil ter dúvidas. Muito bom!!!
Eduardo Pires em 16 de outubro de 2012 às 09:50 disse:
Fala Marcos, obrigado! Fique a vontade para sugerir novos temas.
Luiz Paulo em 12 de dezembro de 2012 às 10:00 disse:
Muito legal, como vim de python, esses lambdas são bem tranquilos pra mim
mas e sobre os que eu vejo em algumas classes genéricas por ai?
Eduardo Pires em 17 de dezembro de 2012 às 06:35 disse:
Não consegui entender sua dúvida, poderia postar algum exemplo?
Allan em 11 de junho de 2013 às 18:14 disse:
Caro Eduardo não entendi o que significa o x em :
// List novaListaPessoas;
// novaListaPessoas = listaPessoas.OrderByDescending(x => x.Nome).ToList();
Eduardo Pires em 11 de junho de 2013 às 22:09 disse:
Expressões Lambda são assim mesmo, possuem essa sintaxe meio fora do comum. O "x" é o argumento, pode ser "x", "y", "j", tanto faz, você define como um apelido, quando o "x" acompanhado do operador lambda "=>" em seguida, significa que você quer fazer realizar uma expressão com base no contexto:
O "n" nesse caso é uma representação do seu contexto, que é o array "numbers".
Entendo sua duvida, faz parte da sintaxe das expressões lambda, o que importa é você entender como identificar as partes, segue um trecho do artigo para frisar o que estamos falando:
Uma expressão lambda sempre consiste de duas partes (esquerda e direita) separadas pelo "=>". A parte à esquerda do "=>" contém uma lista de argumentos (de tipo não necessariamente definido, pois os tipos podem ser automaticamente indicados pelo compilador). O lado direito contém as instruções.
Allan em 11 de junho de 2013 às 22:49 disse:
Ajudou sim, muito obrigado Eduardo, aproveito para deixar meus parabéns, pois o site esta muito interessante e com um conteúdo inteligente.
Eduardo Pires em 11 de junho de 2013 às 23:09 disse:
Obrigado Allan, divulgue para seus colegas 🙂
Eugénio em 18 de janeiro de 2014 às 18:06 disse:
É a minha primeira vez aqui na sua página, e confesso que estou impressionado pela didática usada, simples e de fácil compreensão. Parabéns cara, sanou completamente as minhas dúvidas sobre Generics (estava me fazer bastante confusão). Sempre que tiver dúvidas consultarei!
Eduardo Pires em 21 de janeiro de 2014 às 14:46 disse:
Muito obrigado Eugenio!
Vou me esforçar para entregar sempre mais conteúdos úteis e de fácil compreensão.
Ricardo Santana em 12 de julho de 2014 às 21:58 disse:
Você tem algum modelo do uso de Generic com exceção?
Depende, o que está pensando em fazer?
Jedson em 6 de janeiro de 2015 às 14:29 disse:
Muito obrigado pelas aulas.
Para quem já tem conhecimento em programação, mas é novo em C#, estas dicas que você deu foram perfeitas. Suscintas, práticas.
Fala Jedson!
Renato Rodrigo Chinaglia em 6 de abril de 2015 às 09:27 disse:
Quando eu crescer quero ser igual a você huahuahua
Thyago em 5 de maio de 2015 às 11:50 disse:
Fala Eduardo! Parabéns pelos seus ensinamentos.
Seria muito valido adicionar ao curso de iniciantes em C# as diferenças entre List, ArrayList, Array, Colletions (e se tiver outros parecidos). Para esclarecer definitivamente essas duvidas, minhas e acredito que de outras pessoas.
Mauricio em 9 de julho de 2015 às 13:13 disse:
Primeiramente te parabenizo pela atitude de disseminar conhecimento, isso esta cada vez mais difícil nos tempos atuais.
Estou com uma dificuldade em carregar uma List, em meu código, se puder me dar uma luz te agradeço.
A Situação é a seguinte possuo uma classe cliente, e carrego ela com dados da tela através de um botão, feito isso adiciono a uma coleção essa classe, e utilizo essa coleção para popular um grid, porem, ao adicionar um novo registro o grid não acrescenta linhas apenas substitui os dados, e na row count da coleçao aparece apena 1 linha.
oque pode estar acontecendo de errado.
CLAUDIO ARAUJO em 5 de agosto de 2015 às 14:42 disse:
ESSE SITE E OTIMO PARA QUEM PRECISA TIRAR DUVIDAS, E APRENDER BOAS TECNICAS DE PROGRAMAÇÃO.
Cah em 30 de setembro de 2015 às 17:53 disse:
Gostaria de fazer o seguinte tenho a classe pessoa e quero por exemplo criar uma lista de telefones(que pode conter n números de telefone)
Samuel em 15 de outubro de 2015 às 09:22 disse:
Parabéns Eduardo, estou impressionado com a clareza e simplicidade com que você consegue ensinar, fazendo parecer fácil assuntos complexos.
Como a biblia diz: "melhor é dar do que receber", obrigado por compartilhar o conhecimento, Deus abençoe.