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.

Preguntas similare

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.


Respuesta Responder a este mensaje
#2 Miquel
16/06/2008 - 20:46 | Informe spam
Hola,
Grácias por responder las dos curiosidades.
Y, no sabía esto del código fuente de .NET

Muy aggradecido.

Miquel


"Trapazza" escribió en el mensaje de noticias
news:
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.


Respuesta Responder a este mensaje
#3 Eduardo
17/06/2008 - 02:14 | Informe spam
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.



Hola
Podrias dar mas detalles sobre ese tema de ver el codigo fuente? Como uno
hace para verlo?
Respuesta Responder a este mensaje
#4 Chema
17/06/2008 - 23:27 | Informe spam
En este link tienes toda la información necesaria para configurar el
VisualStudio 2008 y poder acceder al código fuente.



"Eduardo" escribió en el mensaje de
noticias:#
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.



Hola
Podrias dar mas detalles sobre ese tema de ver el codigo fuente? Como
uno hace para verlo?

Respuesta Responder a este mensaje
#5 Chema
18/06/2008 - 11:12 | Informe spam
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida