Início > C# > Série dicas do C#: Algumas operações com delegate.

Série dicas do C#: Algumas operações com delegate.

18 de julho de 2009 Deixe um comentário Go to comments

Continuando nossa série de dicas do C#, falarei um pouquinho de algumas operações dentro de um IList utilizando o delegate (método anônimo). Lembrando que para métodos anônimos também temos a Lambda Expression e existe alguns post´s o qual eu cito exemplos do mesmo neste blog.

No entanto, como a maioria das duvidas que recebo, é com delegate (framework 2.0),hoje irei dar este espaço a ele.

A primeira coisa que iremos fazer é cria uma lista do tipo List<string> e armazenar alguns valores na mesma para que possamos fazer nossas operações, para isso crie uma lista conforme exemplo abaixo:

//Lista de pessoas

List<string> TodasPessoas = new List<string>();

TodasPessoas.Add("Maria Bonita");

TodasPessoas.Add("José António");

TodasPessoas.Add("António Marcos");

TodasPessoas.Add("Nelson Borges");

TodasPessoas.Add("Claudia Borges");

 

1-) Duvida como ordenar os registros utilizando o método Sort do IList ?

R: No nosso primeiro uso do delegate iremos utilizar o método anônimo dentro do List.Sort que utiliza em uma das suas assinaturas o  Comparison(T).

Veja o exemplo do código abaixo:

//Ordenando a lista de pessoas por Nome utilizando o Delegate

TodasPessoas.Sort(delegate(string c, string d) { return c.CompareTo(d); });

 

Neste caso estamos passando o método anônimo para o Sort e pedimos para ele retornar o valor, antes de retornar efetuamos a  comparação do mesmo.

A Lista TodasPessoas, ficará da seguinte forma:

António Marcos
Claudia Borges
José António

Maria Bonita

Nelson Borges

 

2-) Como filtrar uma lista (IList) retornando uma outra lista filtrada.

R: Para este caso iremos utilizar o método FindAll do IList que retorna todos os elementos de acordo com o Predicate (delegate).

Veja o exemplo do código abaixo:

//Buscando uma lista de valores específicos

List<string> filtro = TodasPessoas.FindAll(delegate(string c) { return c.Contains("Borges"); });

 

Para ficar mais fácil a demonstração de nosso exemplo, criamos um novo objeto “filtro” do tipo List<string> que irá receber os valores de TodasPessoas que contenham o “Borges” no nome.

O objeto filtro irá conter os seguintes valores:

Claudia Borges
Nelson Borges

 

3-) Como filtrar um valor especifico?

R: Para pegar um valor especifico, utilizaremos o Find, a idéia é a mesma que o FindAll, com a diferença que Find retorna apenas um elemento.

Veja o Código abaixo:

//Buscando um valor especifico

string novoFiltro = filtro.Find(delegate(string c) { return c.Contains("Nelson"); });

 

No exemplo acima, o objeto novoFiltro do tipo string esta buscando dentro da lista filtro o elemento que contém “Nelson” no nome, como resultado teremos o seguinte :

Nelson Borges

 

Veja como é simples utilizar os métodos anônimos, espero que tenham gostado, para baixar o exemplo completo clique aqui.

Abraço,

 

Nelson Borges

Categorias:C#
  1. Francisco
    19 de julho de 2009 às 0:39

    Muito bom !! Já precisei utilizar ordenação em algumas ocasiões e a única maneira que havia encontrado foi trabalhar com uma outra entidade concreta que implementasse a interface IComparaple<T> , mas o framework jé prove recursos muito mais eficientes e robustos como já mostrado aqui !!!Grande Nelson continue assim …

  2. 15 de maio de 2012 às 11:27

    Obrigado pelo excelente artigo Nelson!

    Atenciosamente,
    Charles Lomboni.

  1. No trackbacks yet.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: