.NET

30 jul, 2008

Recuperando valores de listas complexas

Publicidade

1. 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.

2. 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á.

3. 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; }
    }
}

4. 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);

5. 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.

6. 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.

7. Finalizando

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

Espero ter contribuído!

Até o próximo!