Neste artigo vou mostrar como tratar lista de objetos usando a linguagem C#. |
Eu estou usando o VS Community 2017 e a versão 7.0 da linguagem C#, com o .NET Framework 4.6, mas o código pode ser executado em versões anteriors.
Vamos imaginar que você tenha uma classe Pessoa definida com o seguinte código:
public class Pessoa { public Pessoa() {} public string Nome { get; set; } public int Idade { get; set; } public Pessoa(int idade, string nome) { this.Idade = idade; this.Nome = nome; } } |
Nota: Note que temos dois construtores na classe Pessoa.
Veja como é simples criar uma lista de objetos Pessoa e listar o seu conteúdo :
using System; using System.Collections.Generic; class Program { static List<Pessoa> pessoas; static void Main(string[] args) { pessoas = new List<Pessoa>(); pessoas.Add(new Pessoa(50, "Macoratti"));
pessoas.Add(new Pessoa(25, "Jefferson"));
pessoas.Add(new Pessoa(45, "Miriam"));
pessoas.Add(new Pessoa(null, null));
foreach (Pessoa p in pessoas)
{
Console.WriteLine(p.Nome + " " + p.Idade);
}
Console.ReadKey();
}
}
|
Usamos a classe List<T> que representa uma lista fortemente tipada de objetos do tipo Pessoa que podem ser acessados pelo seu índice, e, usei o método Add() para incluir objetos no fim da lista.
A classe List<T> também fornece uma série de métodos que vão facilitar muito sua vida. Dentre eles eu destaco os métodos : ForEach, FindAll, Find e Sort.
Vejamos esses métodos em ação.
1- Lista não ordenada
static void ListaNaoOrdenada()
{
Console.WriteLine("Lista não ordenada");
pessoas.ForEach(delegate (Pessoa p)
{
Console.WriteLine(String.Format("{0} {1}", p.Idade, p.Nome));
});
}
|
Para obter lista não ordenada basta percorrer a lista usando um ForEach.
2- Lista ordenada por nome
static void ListaOrdenadaPorNome()
{
Console.WriteLine("Lista Ordenada por Nome");
pessoas.Sort(delegate (Pessoa p1, Pessoa p2)
{
return p1.Nome.CompareTo(p2.Nome);
});
pessoas.ForEach(delegate (Pessoa p)
{
Console.WriteLine(String.Format("{0} {1}", p.Idade, p.Nome));
});
}
|
Aqui o método Sort() classifica os elementos em toda lista usando o comparador padrão.
3- Lista ordenada por idade
static void ListaOrdenadaPorIdade()
{
Console.WriteLine("Lista Ordenada por Idade");
pessoas.Sort(delegate (Pessoa p1, Pessoa p2)
{
return p1.Idade.CompareTo(p2.Idade);
});
pessoas.ForEach(delegate (Pessoa p)
{
Console.WriteLine(String.Format("{0} {1}", p.Idade, p.Nome));
});
}
|
Aqui o método Sort() classifica os elementos em toda lista usando o comparador padrão.
4- Inserir um item na lista em uma posição do índice
static void ListaInserirItemNaPosicao()
{
Console.WriteLine("Inserindo uma pessoa na posição 1 e outra na posição 3");
pessoas.Insert(1, new Pessoa() { Nome = "Bob Dylan", Idade = 78 });
pessoas.Insert(3, new Pessoa() { Nome = "Jimmi Page", Idade = 81 });
}
|
O método Insert() insere o elemento na lista em uma posição especificada.
5- Remover um item da lista
static void ListaRemoverItem()
{
Console.WriteLine("Removendo objeto Pessoa : Nome=Macoratti, Idade=45");
pessoas.Remove(new Pessoa() { Idade = 45 , Nome = "Macoratti" });
}
|
O método Remove() remove a primeira ocorrência de um objeto específico.
6- Verificar se existe um item na lista
static void ListaVerificarSeItemExiste()
{
Console.WriteLine("\nExiste na Lista Pessoa com Idade igual a 78 : {0}",
pessoas.Exists(p => p.Idade == 78));
}
|
O método Exists() determina se a List<T> contém objetos que combinam as condições definidas pelo predicado especificado.
O método string.Join combina cadeias de caracteres em uma única. Ele recebe dois argumentos: um array (ou IEnumerable) e uma seqüência separadora.
7- Converter a lista para um Array
static void ListaConverterParaArray()
{
Console.WriteLine("Convertendo a lista para um Array");
Pessoa[] ListaArray = pessoas.ToArray();
foreach (Pessoa p in ListaArray)
{
Console.WriteLine(p.Nome + " "+ p.Idade);
}
}
|
O método ToArray() copia os elementos da List<T> para um novo array.
8- Localizar a pessoa mais jovem na lista
static void ListaLocalizaPessoaMaisJovem()
{
List<Pessoa> jovem = pessoas.FindAll(delegate (Pessoa p) { return p.Idade < 25; });
Console.WriteLine("Idade é menor que 25 : ");
jovem.ForEach(delegate (Pessoa p)
{
Console.WriteLine(String.Format("{0} {1}", p.Idade, p.Nome));
});
}
|
O método FindAll recupera todos os elementos que combinam as condições definidas pelo predicado especificado.
Segue abaixo o resultado obtido executando todos os métodos acima:
Pegue o projeto completo aqui: CShp_Listas.zip
E agora, filhinhos, permanecei nele(Jesus); para que, quando ele se manifestar, tenhamos confiança, e não sejamos confundidos por ele na sua vinda. 1 João 2:28
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
C# - Trabalhando com Coleções Genéricas do tipo List(<T>) - Macoratti