miércoles, julio 12, 2006

Más de delegados anónimos

Hoy necesitabamos tener toda una lista de partidas que están dentro de una compra.
Una compra es una lista de pedidos y un pedido es un diccionario de partidas, así que como sacarlo de manera sencilla.


public List Partidas
{
get
{
List partidas = new List();
ForEach(delegate(Pedido pedido) { partidas.AddRange(pedido); });
return partidas;
}
}

No sólo esto simplifico nuestro código, sino que lo hizo más seguro, encapsulando variables que no necesitaban ser de instancia.
Había otras soluciones, pero la más obvia era hacer algo como lo siguiente

List partidas; // Ahora es variable de instancia para que el delegate lo pueda usar.
public List Partidas
{
get
{
partidas = new List();
ForEach(new Action(AddPartidas)); // Ahora usamos un metodo como delegado
return partidas;
}
}

public void AddPartidas(Pedido pedido)
{
partidas.AddRange(pedido);
}

No solo el código es más largo, creamos un metodo extra muy sencillo que sólo se usa desde un lugar, sino que aparte y lo peor de todo, es que ahora cualquier metodo o propiedad de la clase puede usar la variable partidas, pensando que sirve para algo más que para regresarla a algún cliente de este objeto desde la propiedad Partidas.

No hay comentarios.: