Pregunta

Bueno, obtuve un objeto llamado Mamamia y dentro de él tiene algunas propiedades de cadena. Creé una lista de este objeto y lo rellené con 150 elementos.

Estoy tratando de usar List.FindAll pero realmente no sé cómo hacerlo. Lo he intentado de esta manera:

produto = products.FindAll(delegate(Mamamia cv) {return cv.LocalPackage.Remove(1,21) == cmbPackage.SelectedValue};

No sé por qué está el delegado, solo intenté copiar desde otro código en Internet.

¡Gracias de antemano!

¿Fue útil?

Solución

El delegado está allí para ver si el valor que está probando es lo que está buscando. Sin embargo, la llamada a Eliminar parece preocupante como si estuviera mutando el valor; eso rara vez es algo bueno cuando estás revisando la lista. Supongo que si es una cadena, entonces no está tan mal, aunque puede que no sea lo que buscas ...

¿Cuáles son los tipos involucrados y qué estás buscando? Ah, y ¿estás usando C # 3 y / o .NET 3.5? Eso lo haría más fácil (incluso C # 3 contra .NET 2.0 significa que podría usar una expresión lambda en lugar de un método anónimo).

¿Qué sucede cuando ejecuta el código en este momento? Si simplemente no encuentra nada, puede simplemente ser porque está probando la igualdad de referencia (si SelectedValue devuelve object ).

Prueba esto:

produto = products.FindAll(delegate(Mamamia cv) {
    return cv.LocalPackage.Remove(1,21).Equals(cmbPackage.SelectedValue);
});

EDITAR:

Parece que solo desea un valor único, y si está usando .NET 3.5, sería más idiomático usar LINQ en primer lugar. Yo usaría:

string selectedText = (string) cmbPackage.SelectedValue;
Mamamia item = products.FirstOrDefault
                  (cv => cv.LocalPackage.Remove(1,21) == selectedText);
if (item != null)
{
    // Found it; otherwise item will be null
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top