Domanda

Bene, ho un oggetto chiamato Mamamia e al suo interno ha delle proprietà di stringa. Ho creato un elenco di questo oggetto e lo ho popolato con 150 elementi.

Sto cercando di usare List.FindAll ma in realtà non so come farlo. Ho provato in questo modo:

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

Non so perché il delegato sia lì, ho appena provato a copiare da qualche altro codice su Internet.

Grazie in anticipo!

È stato utile?

Soluzione

Il delegato è lì per vedere se il valore che stai testando è quello che stai cercando. La chiamata a Rimuovi sembra preoccupante come se stesse cambiando il valore, ma raramente è una buona cosa quando si guarda l'elenco. Immagino che se è una stringa, non è poi così male, anche se potrebbe non essere quello che stai cercando ...

Quali sono i tipi coinvolti e cosa stai cercando? Oh, e stai usando C # 3 e / o .NET 3.5? Ciò renderebbe più semplice (anche C # 3 contro .NET 2.0 significa che potresti usare un'espressione lambda anziché un metodo anonimo).

Cosa sta succedendo quando esegui il codice al momento? Se non trova nulla, potrebbe semplicemente perché stai testando l'uguaglianza di riferimento (se SelectedValue restituisce oggetto ).

Prova questo:

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

EDIT:

Sembra che tu voglia un solo valore e, se stai usando .NET 3.5, sarebbe più idiomatico usare LINQ in primo luogo. Vorrei usare:

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
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top