Recuperando valores de listas complexas

 

Introdução

Generics, predicates... Quem é que já não ouviu falar ou leu sobre esses termos e ainda não sabe para que servem? Pois bem, neste artigo vamos conceituar e combinar esses dois “ingredientes mágicos” com o propósito de recuperar valores de listas.

 

Utilizaremos o VS 2005 para implementarmos esse exemplo.

 

Generics

Generics consiste em tipar uma coleção de modo a garantir que apenas um tipo de dados pertença a ela. Caso você tente inserir dados de outros tipos, o compilador não permitirá.

 

Criando Metadados

Vamos construir uma classe chamada Produtos com algumas propriedades que utilizaremos para implementar a nossa coleção tipada:

 

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

 

/// <summary>

/// Summary description for Produtos

/// </summary>

public class Produto

{

        public Produto()

        {

               //

               // TODO: Add constructor logic here

               //

        }

 

    private int CdProduto;

    public int Codigo

    {

        get { return CdProduto; }

        set { CdProduto = value; }

    }

 

    private string NmProduto;

    public string Nome

    {

        get { return NmProduto; }

        set { NmProduto = value; }

    }

 

    private string DeProduto;

    public string Descricao

    {

        get { return DeProduto; }

        set { DeProduto = value; }

    }

}

 

Criando coleção tipada

Utilizando a classe Produtos criada anteriormente, vamos criar uma coleção tipada utilizando generics:

 

Produto objProduto1 = new Produto();

 

objProduto1.Codigo = 1;

objProduto1.Nome = "Teste nome 1";

objProduto1.Descricao = "Teste descrição 1";

 

Produto objProduto2 = new Produto();

 

objProduto2.Codigo = 2;

objProduto2.Nome = "Teste nome 2";

objProduto2.Descricao = "Teste descrição 2";

 

System.Collections.Generic.List<Produto> arrProdutos = new

    System.Collections.Generic.List<Produto>();

 

arrProdutos.Add(objProduto1);

arrProdutos.Add(objProduto2);

 

Predicates

Predicate representa um método que define os critérios para uma pesquisa em uma lista tipada, determinando se um item da lista atende ou não a estes critérios previamente estabelecidos.

 

Recuperando valores da coleção

O C# permite que utilizemos métodos denominados anônimos (in-line), para evitarmos a criação de um método exclusivo apenas para comparar o valor de uma propriedade dos objetos que compõem a nossa coleção tipada.

 

Abaixo temos um exemplo que procura um produto no qual a propriedade “Nome” seja igual a “Teste nome 2”.

 

System.Collections.Generic.List<Produto> arrResposta =

    arrProdutos.FindAll(new Predicate<Produto>(

    delegate(Produto objProduto) {

    return (objProduto.Nome == "Teste nome 2"); }));

 

Obs: É importante enfatizar que utilizamos um delegate para fazer um método in-line evitando um método exclusivo.

 

Finalizando

Neste artigo abordamos como utilizarmos predicates para recuperarmos valores de listas construídas com generics.

 

Espero ter contribuído!

 

Até o próximo!

Diego Gazotto Dezembro