Uso dei delegati e di predicate in liste

di il
3 risposte

Uso dei delegati e di predicate in liste

Buongiorno, sto iniziando a masticare con i delegati e i predicate.

Nell'ipotesi di avere una List <Persona> lista, per usare il metodo Find è possibile usare una lambda expressione lista.Find(var => var.Nome = “Pinco”). Ma se uno volesse passare attraverso un metodo, dovendo essere il predicato da passare al metodo Find del tipo Predicate <Persona>, come faccio a passare il parametro da ricerca e ad implementare come nel codice in basso?

public static bool TrovaByName(Persona p, string nome)
       {
           if (p.Nome == nome) return true;
           else return false;
       }

       static void Main(string[] args)
       {
           Predicate <Persona> metodo_ricerca = (TrovaByName);
           List <Persona> lista = new List<Persona>();
           ……qui metto i vari add

           lista.Find(metodo_ricerca);
       }

3 Risposte

  • Re: Uso dei delegati e di predicate in liste

    19/01/2024 - zoro82 ha scritto:


    Nell'ipotesi di avere una List <Persona> lista, per usare il metodo Find è possibile usare una lambda expressione lista.Find(var => var.Nome = “Pinco”). Ma se uno volesse passare attraverso un metodo, dovendo essere il predicato da passare al metodo Find del tipo Predicate <Persona>, come faccio a passare il parametro da ricerca e ad implementare come nel codice in basso?

    Devi studiare LINQ e utilizzare ad esempio il metodo Where().

    Leggi questo articolo (e quelli correlati) per approfondire.

  • Re: Uso dei delegati e di predicate in liste

    Ok. Però limitatamente al metodo Find ho l'obbligo di passare un predicate con parametro  un riferiment ad un oggetto del tipo della lista. 

    Aveva visto però che con una macumbata si poteva fare, cioè si poteva passare un value da ricercare. 

  • Re: Uso dei delegati e di predicate in liste

    19/01/2024 - zoro82 ha scritto:


    Ok. Però limitatamente al metodo Find ho l'obbligo di passare un predicate con parametro  un riferiment ad un oggetto del tipo della lista. 

    Aveva visto però che con una macumbata si poteva fare, cioè si poteva passare un value da ricercare. 

    Non capisco quale “macumbata” ti serva: basta passare un metodo che, data la singola persona, restituisca un valore booleano che segnali se la persona soddisfa il filtro di ricerca oppure no.

    Quale valore dovresti passare? Se il valore è l'oggetto della persona, a che ti serve fare una Find() cercando l'oggetto che corrisponde all'oggetto che stai passando? Non ha senso.

    Spiega meglio cosa stai cercando di fare, perché non è chiaro né quale sia la limitazione che riscontri, né quale risultato vuoi ottenere.

Devi accedere o registrarti per scrivere nel forum
3 risposte