Desenvolvimento - C#
Explorando as Coleções do .NET Framework - Parte 1
O .NET Framework tem um poderosíssimo conjunto de coleções que podemos utilizar nas nossas aplicações de maneira bem simples, localizados nos namespaces System.Collections, System.Collections.Generic e System.Collections.Specialized.
por Rodolfo PaoniO .NET Framework tem um poderosíssimo conjunto de coleções que podemos utilizar nas nossas aplicações de maneira bem simples, localizados nos namespaces System.Collections, System.Collections.Generic e System.Collections.Specialized. Temos coleções fortemente tipadas, coleções que permitem trabalhar com qualquer tipo de dados e coleções baseadas em dicionários e tipo chave/valor. Mostrarei exemplos sobre algumas das mais importantes coleções do .NET Framework:
ArrayList
ArrayList aList = new ArrayList();
aList.Add("Rodolfo"); // Aceita qualquer object
aList.Add(1);
aList.Add(true);
aList.Add(new Cliente("Rodolfo"));
for (int i = 0; i < aList.Count; i++)
{
if (aList[i] is Cliente)
{
//
Para recuperar o tipo correto, precisamos realizar comparações
Console.WriteLine("Nome:
" + ((Cliente)aList[i]).Nome);
}
}
Manupulando um Array Simples em um ArrayList
int[] codigos = { 1, 2, 46, 32, 78 };
ArrayList listagem = new ArrayList(codigos); //Carrega um
array
listagem.Remove(46); //Remove um elemento
listagem.Add(10);
listagem.Add(20);
listagem.Add(30); //Insere um novo elemento
Console.WriteLine(listagem.Count); //Imprime seu tamanho
atual
int j = (int)listagem[2]; //Passa o valor
32 para a variável j
listagem.Sort();
//Ordena os elementos (Como os elementos são do mesmo tipo, a ordenação é
simples)
codigos = new int[listagem.Count];
listagem.CopyTo(codigos); //Preenche um
array
listagem.Clear();
//Remove todos elementos
Criando coleções customizadas
Como já explicado em "Generics com C# 2.0 - Revisitado", podemos criar nossas próprias coleções. Utilizávamos muito esta técnica no .NET 1.1, onde ainda não existia o Generics.
public class UsuarioCollection : CollectionBase
{
public int Add(Usuario u)
{
return
base.List.Add(u);
}
public bool Contains(Usuario u)
{
return
base.List.Contains(u);
}
public void Insert(int index,
Usuario u)
{
base.List.Insert(index, u);
}
public Usuario this[int index]
{
get { return
(Usuario)base.List[index]; }
set {
base.List[index] = value; }
}
public void Remove(Usuario u)
{
base.List.Remove(u);
}
}
Utilizando Generics
List<Cliente> clientes = new List<Cliente>();
clientes.Add(new Cliente("Rodolfo", 23));
clientes.Add(new Cliente("João", 22));
clientes.Add(new Cliente("Maria", 25));
//Erro em tempo de compilação, pois a lista foi definida como uma lista de
"Cliente"
//clientes.Add(new Funcionario("Rodolfo"));
clientes.Sort();
//Recuperando as informações com "foreach"
foreach (Cliente c in clientes)
{
Console.WriteLine("Nome: " + c.Nome);
}
A classe cliente implementa IComparable para permitir a odenação na lista:
public class Cliente :
IComparable<Cliente>
{
private string _nome;
private int _idade;
public Cliente() { }
public Cliente(string nome, int
idade)
{
this._nome =
nome;
this._idade
= idade;
}
public string Nome
{
get { return
this._nome; }
set {
this._nome = value; }
}
public int Idade
{
get { return
_idade; }
set { _idade
= value; }
}
#region IComparable<Cliente> Members
public int CompareTo(Cliente other)
{
return
Idade.CompareTo(other.Idade);
}
#endregion
}
Na parte 2 deste artigo exploraremos mais a fundo as coleções que o .NET Framework nos oferece. Até a próxima!