Recherche dans des listes grâce aux délégués ( C#)
Le quotidien d’un développeur consiste le plus souvent à trouver l’information dont il a besoin et de l’utiliser de façon intelligente, et j’ai remarqué une petite chose lorsque je regarde des exemples de code sur le net,c’est que pas mal de gens ne savent pas utiliser ce que j’appellerais « ‘une des plus grande invention du langage » : la recherche dans les collections d’élément via des délégués.
Qu’est-ce que sont les délégués ?
Un petit exemple rapide:
Une classe Personne avec des attributs Nom, Prenom.
Une liste contenant des personnes serait du genre :
List<Personne> listePersonne = new List<Personne>();
///Nouvelles personnes
Personne p1 = new Personne(« Duran », « Paul »);
Personne p2 = new Personne(« Dupont », « Paul »);
listePersonne.Add(p1);
listePersonne.Add(p2);
Pour rechercher une personne contenu dans la liste, une grande partie des personnes fait avec la méthode old-school:
Personne perso;
for (int i = 0; i < listePersonne.Count; i++)
{
if (listePersonne[i].Nom == « Duran »)
{
perso = listePersonne[i];
}
}
Ce code marche, mais en C#, il existe la méthode Find :
///Recherche d’une personne
Personne perso = listePersonne.Find(delegate(Personne p) { return p.Nom == « Duran »; });
///Recherche de plusieurs personnes
List<Personne> lperso = listePersonne.FindAll(delegate(Personne p) { return p.Nom == « Paul »; });
Ça fait exactement la même chose (à part que find renvoie la première occurrence trouvée alors que le code avec le for renvoie la dernière occurrence)
De nombreuses méthodes utilisent les délégués (Find, FindAll…) C’est très utile et c’est surtout beaucoup plus propre dans le code. Je suppose que du coté des performances, c’est la même chose, un gain de rapidité grâce au Find, à confirmer toutefois.