Si on y regarde bien les collections et plus particulièrement les collections génériques offrent toutes les méthodes dont on peut avoir besoin (tant pour ajouter 1 ou plusieurs objets à la fois à une collection,modifier,supprimer ,sélectionner un ou plusieurs éléments,etc. ) voir le tuto que j’ai fait >
http://www.csharpfr.com/tutoriaux/NET-TOUR-HORIZON-MEMBRES-GENERICS-SYSTEM-COLLECTIONS-GENERIC_685.aspx
Par contre pour sélectionner selon des critères bien précis,on risque vite d’avoir à ajouter beaucoup de méthodes si on doit utiliser les predicate (avec les méthodes de sélection comme Find,FindAll,etc. des generics)
J’ai développé ces classes qui ne sont pas parfaites certainement mais qui évitent d’avoir à coder les méthodes pour chaque « filtre » que l’on aurait voulu, il suffit d’instancier une des classes (selon le type de la propriété visée int,string,datetime,Double) …
Passer au constructeur :
- le type de comparaison à faire (ex : pour stringPredicateHelper > ce sera StartWith pour trouver tous les noms commencant ou contains , etc.)
- le nom de la propriété visée (ex : la propriété « ContactName » de la classe Contact)
- et la valeur comparée (ex : passer « A » pour trouver tous les contacts dont les noms commenceraient par « A »)
il suffit ensuite d’appeler la méthode Predicate
ce qui donne par exemple ;
//Tous les contacts dont le nom commence par A
stringPredicateHelper oStringPredicateHelper = new stringPredicateHelper(stringComparaison.StartWith, "ContactName", "A");
List<Contact> oSearchContacts = oContacts.FindAll(oStringPredicateHelper.Predicate);
dataGridView1.DataSource = oSearchContacts;
J’ai inclus également
- un exemple de code montrant comment on peut passer des paramètres à un predicate (grâce aux méthodes anonymes)
- un exemple de code comment trier sur plusieurs colonnes avec IComparer (ce que je viens de connaitre grâce au forum :p)
- une classe de sérialization Xml générique
> dans le cas ou on veut ajouter des fonctionnalités à une classe par exemple à stringPredicateHelper :
- ajouter une valeur à l'enum correspondante (dans le cas stringPredicateHelper c'est donc StringComparaison)
- ajouter la comparaison dans la méthode Predicate (ajouter la valeur de l'enum au switch) qui renverra le booléen "result"
Bon voila je sais que j’ai peut être pas été très clair dans les explications et que pas forcément tout le monde connait et utilise les predicate, mais j’ai mis un zip qui contient un projet de test très simple et très clair
De plus il est très facile d’ajouter, personnaliser ou d’améliorer des méthodes ..
++