Método List.Find

15/06/2008 - 17:50 por Miquel Busom | Informe spam
Hola,

Tengo un List "L" de objectos "O". Cada objeto "0" tiene las propiedades
"Codigo" y "Descripcion".
Para encontrar un "O" dentro de "L" a partir de su "Codigo" tengo esta
funcion:

public static string ObtenDescripcion (int CodigoBusqueda)
{
O o = L.Find(Delegate(O o1) {return o1.Codigo == CodigoBusqueda;});
return o == null ? string.empty : o.Descripción;
}

y funciona perfectamente.
Pero, como se definiria el predicado de Find si éste no se definiera como un
método anónimo?
No sé como pasarle el parámetro (int CodigoBusqueda) para que haga la
comparación.
Y, otra pregunta, es más eficiente el uso de Find, que el recorrer con un
ForEach hasta encontrar el objeto buscado? No deben hacer más o menos lo
mismo?

Grácias.
 

Leer las respuestas

#1 Trapazza
16/06/2008 - 17:53 | Informe spam
Hola.

Si lo hicieras con una función no anónima no tendrías más remedio que
guardar el código de búsqueda en un lugar al que dicha función pudiera
acceder, lo que hace que el código se ofusque un poco más :)

Sin embargo, hay otra manera mucho más elegante de hacer esto (a partir de
la versión 3.5 de .NET, creo) y es utilizando una expresión lambda, con lo
que el código quedaría así:

public static string ObtenDescripcion (int CodigoBusqueda)
{
O o = L.Find( item => item.Codigo == CodigoBusqueda );

return o != null ? o.Descripción : string.empty;
}

Con respecto a lo segundo, hacen prácticamente lo mismo. Si tienes
curiosidad por ver cómo ha sido programado ya tienes disponible el código
fuente de muchas de las librerías de .NET para usarlo mientras depuras con
Visual Studio 2008.

Espero te haya servido.



"Miquel Busom" escribió en el mensaje de
noticias:
Hola,

Tengo un List "L" de objectos "O". Cada objeto "0" tiene las propiedades
"Codigo" y "Descripcion".
Para encontrar un "O" dentro de "L" a partir de su "Codigo" tengo esta
funcion:

public static string ObtenDescripcion (int CodigoBusqueda)
{
O o = L.Find(Delegate(O o1) {return o1.Codigo == CodigoBusqueda;});
return o == null ? string.empty : o.Descripción;
}

y funciona perfectamente.
Pero, como se definiria el predicado de Find si éste no se definiera como
un método anónimo?
No sé como pasarle el parámetro (int CodigoBusqueda) para que haga la
comparación.
Y, otra pregunta, es más eficiente el uso de Find, que el recorrer con un
ForEach hasta encontrar el objeto buscado? No deben hacer más o menos lo
mismo?

Grácias.


Preguntas similares