Você está na página 1de 9

C# - Trabalhando com Colees Genricas do tipo List(<T>)

A coleo List(T) representa uma coleo de objetos tipados a qual altamente otimizada oferecendo um bom desempenho e pode ser acessada usando ndice. Esta classe fornece mtodos para percorrer, filtrar, ordenar, procurar e manipular colees. ( A verso no gnerica seria a classe ArrayList ). A Classe List(<T>) representa uma lista de objetos que podem ser acessados pelo ndice. Fornece mtodos para pesquisar, ordenar e manipular listas. A classe List(<T>) o equivalente genrico da classe ArrayList. Ele implementa a interface genrica IList<(Of <(T>)>) usando uma matriz cujo tamanho aumentado dinamicamente conforme necessrio. O List(<T>) usa um comparador de igualdade e um comparador de classificao. Obs: Mtodos, como Contains, IndexOf, LastIndexOf e Remove usam um comparador de igualdade para os elementos de lista e mtodos, como BinarySearch e Sort usam um comparador de classificao para os elementos de lista. muito importante voc conhecer e saber usar a classe List(<T>) e neste artigo eu procuro mostrar algumas operaes bsicas. Eu vou usar o Visual C# 2008 Express Edition nos exemplos deste artigo: Abra o Visual C# e crie um novo projeto do tipo Windows Application com o nome usandoColecoesTipadas; No formulrio padro form1.cs inclua os controles : ListBox , GroupBox e Button conforme o leiaute abaixo:

A primeira coisa a fazer criar um arquivo do tipo Class onde iremos definir a nossa classe de domnio. Clique no menu Project e selecione Add Class informando o nome Pessoa.cs e clicando em Add; Para este exemplo eu vou definir uma classe Pessoa com os seguintes atributos:

ID , Nome , Idade e Sexo; Dois construtores;

using System; using System.Collections.Generic; using System.Text; namespace usandoColecoesTipadas { class Pessoa { public Pessoa() {} public Pessoa(int _id, string _nome, short _idade, char _sexo) { this.p_id = _id; this.p_nome = _nome; this.p_idade = _idade; this.p_sexo = _sexo;

} private private private private int p_id = -1; string p_nome = String.Empty; short p_idade = 0; char? p_sexo = null;

public int ID { get{return p_id;} set{p_id = value;}} public string Nome { get{return p_nome;} set{p_nome = value;}} public short Idade { get{return p_idade;} set{p_idade = value;} } public char? Sexo { get{return p_sexo;} set{p_sexo = value;}} } }

Teremos que carregar a nossa coleo com dados pois vamos trabalhar com a coleo mostrando os recursos da classe List<T>; para isso no evento Load do formulrio vamos incluir o cdigo que ir preencher a nossa lista toda a vez que o mesmo for carregado: Eu vou definir uma rotina chamada carregaLista() que ser chamada no evento Load:
private void Form1_Load(object sender, EventArgs e) { carregaLista(); }

O cdigo da rotina carregaLista() dado a seguir , nela estamos atribuindo valores para as propriedades id, nome, idade e sexo:
private void carregaLista() { pLista = new List<Pessoa>(); pLista.Add(new Pessoa(1, "Joo", 29, 'M')); pLista.Add(new Pessoa(2, "Macoratti", 35, 'F')); pLista.Add(new Pessoa(3, "Americo", 25, 'M')); pLista.Add(new Pessoa(4, "Katia", 21, 'F')); pLista.Add(new Pessoa(5, "Lena", 33, 'F')); pLista.Add(new Pessoa(6, "Suzana", 45, 'F')); pLista.Add(new Pessoa(7, "Jim", 38, 'M')); pLista.Add(new Pessoa(8, "Jane", 32, 'F')); pLista.Add(new Pessoa(9, "Roberto", 31, 'M')); pLista.Add(new Pessoa(10, "Cintia", 25, 'F')); pLista.Add(new Pessoa(11, "Gina", 27, 'F')); pLista.Add(new Pessoa(12, "Joel", 33, 'M'));

pLista.Add(new Pessoa(13, "Germano", 55, 'M')); pLista.Add(new Pessoa(14, "Ricardo", 22, 'M')); pLista.Add(new Pessoa(15, "Maria", 39, 'F')); }

Para imprimir o resultado das operaes eu vou criar uma rotina no formulrio chamada Imprimir() onde eu vou passar como parmetro a lista que eu quero imprimir e uma informao que ser exibida no ListBox:
void Imprimir(List<Pessoa> pLista, string info) { //limpa o controle ListBox lstResultado.Items.Clear(); //'exibe a informao no controle, uma linha em branco e em seguida o cabealho lstResultado.Items.Add(info); lstResultado.Items.Add(""); lstResultado.Items.Add("ID\tNome\tIdade\tSexo"); //Percorre a lista e exibe os dados da mesma pLista.ForEach(delegate(Pessoa p) { lstResultado.Items.Add(p.ID+ "\t"+ p.Nome+"\t"+ p.Idade + "\t" + p.Sexo);} ); }

Obs: Os caracteres \t representam a tabulao (vbTab) e foram usados para formatar a sada na tela. Os namespaces usados no formulrio so:
using using using using using using using System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Text; System.Windows.Forms;

No incio da definio do formulrio temos que declarar uma varivel do tipo List<Pessoa> onde Pessoa a nossa classe, de forma que ela seja visvel em todo o formulrio: List<Pessoa> pLista = null; Agora estamos prontos para realizar as operaes com a nossa lista tipada usando os recursos da classe List<T> com C#. Vamos l...

1- Percorrendo e exibindo todos os itens da lista

private void button1_Click(object sender, EventArgs e) { carregaLista(); Imprimir(pLista, "Lista ordenada por ID"); }

2- Filtrando informaes da lista usando um critrio

private void button2_Click(object sender, EventArgs e) { List<Pessoa> listaFiltroPorIdade = pLista.FindAll(delegate(Pessoa p) { return p.Idade > 30; }); Imprimir(listaFiltroPorIdade, "Pessoas com idades maiore que 30."); }

3- Ordenando a lista por um critrio

private void button3_Click(object sender, EventArgs e) { List<Pessoa> ordenaListaPorNome = pLista; ordenaListaPorNome.Sort(delegate(Pessoa p1, Pessoa p2) { return p1.Nome.CompareTo(p2.Nome); }); Imprimir(ordenaListaPorNome, "Lista ordenada por Nome"); }

Obs: Outra forma de ordenar a lista seria usar LINQ:


var listaOrdenada = from p in pLista orderby p.Nome select p;

4- Removendo itens da lista

private void button5_Click(object sender, EventArgs e) { List<Pessoa> removerLista = pLista; removerLista.RemoveAll(delegate(Pessoa p) { return p.Sexo == 'M'; }); Imprimir(removerLista, "Removendo da lista pessoas do sexo masculino"); }

5- Localizando um item na lista

private void button6_Click(object sender, EventArgs e) { //localiza um objeto Pessoa pessoa = pLista.Find(delegate(Pessoa p1) { return p1.ID == 10; }); lstResultado.Items.Add("Pessoa localizada na lista com ID = 10"); lstResultado.Items.Add(pessoa.ID+ "\t"+ pessoa.Nome+"\t"+ pessoa.Idade + "\t" + pessoa.Sexo);} }

As listas genricas do tipo List<T> permitem realizar diversas operaes com um bom desempenho e um cdigo enxuto. Vale a pena se aprofundar no seu conhecimento. Eu sei apenas C#, mas eu gosto. Pegue o projeto completo aqui : Aguarde mais artigos sobre C#. Referncias:

usandoColecoesTipadas.zip

Veja a seo LINQ do site Desvendando o Entity Framework - O Entity Data Model .NET - Introduo ao ADO .NET Entity Framework II Desvendando o Entity Framework - A classe EntityConnection ADO .NET Entity Framework - Usando LINQ to Entties Apresentando LINQ to Entities

Jos Carlos Macoratti


Ads not by this site

Criando e retornando valores, ArrayList, C#


Arrays so colees de valores guardados em uma s variavel. A classe ArrayList faz parte do namespace System.Collections, diferente dos arrays convencionais que devemos definir exatamente quantas posies e qual o tamanho do array, com arraylist diferente, atravs de classes e mtodos podemos adicionar mais valores, assim aumentando seu tamanho, muito util e dinmico, vamos ao cdigo, clique no leia mais para ver o artigo por completo.

Nosso primeiro passo criar o array list, no segundo momento vamos retornar os valores dele, veja o cdigo abaixo:

//Referncia a classe ArrayList ArrayList alArray = new ArrayList(); //Adiciona valor na posio 0 do nosso array alArray.Add(" Jonatas Freitas "); //Adiciona valor na posio 1 do nosso array alArray.Add(" Hello World ! "); //Adiciona valor na posio 2 do nosso array alArray.Add(" .:: TheCodeBr ::. "); //Adiciona valor na posio 3 do nosso array alArray.Add(" thecodebr.blogspot.com ");

Pronto, com o nosso array criado vamos retornar primeiro os valores um por um, segue cdigo:

//Imprime valores na tela Response.Write(alArray[0]); Response.Write(alArray[1]); Response.Write(alArray[2]); Response.Write(alArray[3]);

Muito fcil no, agora vamos retornar os valores usando for, segue cdigo:

for (int i = 0; i < 3; i++) { //Escreve na tela os valores do array Response.Write(alArray[i]); }