List cercare un oggetto

mercoledì 24 settembre 2008 - 16.33

Simpz Profilo | Junior Member

Ciao a tutti,
sto arrovellandomi sulla documentazione ma non riesco ad uscirne fuori... Voglio estrarre un elemento dalla mia lista di oggetti il quale ha un campo uguale ad un valore. Ho capito che forse devo usare la List<T>.Find ma non capisco il predicate...
Se qualcuno mi può dare una mano è ben accetta.

Grazie a tutti

Simone

rossimarko Profilo | Guru

Ciao,

hai guardato questa documentazione giusto? http://msdn.microsoft.com/en-us/library/x0b5b5bc(VS.80).aspx

Cos'è che non ti è chiaro?
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Simpz Profilo | Junior Member

il predicate... io vorrei mettere nel predicate che cercasse l'oggetto che hi il campo valore=valore... ma non capisco come scriverlo questo predicate

rossimarko Profilo | Guru

Devi creare una funzione che riceve come parametro il tipo della tua lista.

Ti posto un piccolo esempio. Ho fatto una classe utente e un Predicate che si chiama "RicercaUtente" che ricerca l'utente 11. Nell'esempio popolo la collection con 10 valori e poi richiamo la find passandogli il predicate..

private static void CercaInLista() { List<Utente> users = new List<Utente>(); for (int i = 0; i < 10; i++) { Utente tmp = new Utente(); tmp.IDUtente = i; tmp.Cognome = String.Format("Cognome {0}", i); users.Add(tmp); } if (users.Find(RicercaUtente) != null) Console.WriteLine("Elemento trovato"); else Console.WriteLine("Elemento non trovato"); } public static bool RicercaUtente(Utente usr) { return (usr.IDUtente == 11); }
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

freeteo Profilo | Guru

ciao,
concordo sul metodo di Marco, ma attento che se usi un predicate (che è un metodo) non hai accesso subito alle variabili locali del metodo dove sei posizionato e stai facendo la ricerca.

Io per avere questa comodità uso un delegate, la sintassi è leggermente più complessa ma dopo poco ti verrà spontanea in casi di questo tipo.
Ecco il codice di esempio che cerca un file::
string nome = "Matteo"; List<FileInfo> listaFile = new List<FileInfo>(); .....riempimento... FileInfo trovato = listaFile.Find( delegate(FileInfo f) { return f.Name.StartsWith(nome); }); if(trovato != null) MessageBox.Show("Trovato " + trovato.Name); else MessageBox.Show("Nessun file Trovato");
come vedi dentro alla funzione (delegate) che cerca, hai diretto accesso alla variabile "nome" che è quella locale.
Spesso questo ti può tornare utile.
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5