ICOMPARER GÉNÉRIQUE ET RÉFLEXION

lakichemole
Messages postés
253
Date d'inscription
vendredi 13 juin 2003
Statut
Membre
Dernière intervention
18 mai 2009
- 14 avril 2008 à 15:55
jesusonline
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Membre
Dernière intervention
13 octobre 2010
- 15 avril 2008 à 11:48
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/46356-icomparer-generique-et-reflexion

jesusonline
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Membre
Dernière intervention
13 octobre 2010
29
15 avril 2008 à 11:48
pas besoin de T y'aura de l'inference de type :

Orderer.Sort(l, delegate(Person p){
return p.Name;
}, delegate(Person p){
return p.Age;
});

En fait après reflexion, je pense que tu pourrais remplacer U par IComparable dans la méthode Sort (et supprimer la contrainte where) car tu peux pas avoir une Get[] où U aurait un type différent, donc autant passer par un IComparable directement.

le mot clé params veut dire que tu peux mettre autant d'argument que voulu, ils vont se regrouper dans un tableau automatiquement.
lakichemole
Messages postés
253
Date d'inscription
vendredi 13 juin 2003
Statut
Membre
Dernière intervention
18 mai 2009

15 avril 2008 à 11:24
Ok j'ai donc pas tout compris,Je vais abuser de ta patience encore une fois mais en gros l'appel de ta fonction pour une List liste ou User à la propriété age ça donne quoi avec ta méthode statique?
orderer.Sort<String>(Liste,... (la suite?)
jesusonline
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Membre
Dernière intervention
13 octobre 2010
29
15 avril 2008 à 11:08
On trie d'abord par la premiere propriété puis la seconde propriété. Si les premières propriétés sont égales alors on check la seconde et ainsi de suite donc il est nécessaire de faire le break;
lakichemole
Messages postés
253
Date d'inscription
vendredi 13 juin 2003
Statut
Membre
Dernière intervention
18 mai 2009

15 avril 2008 à 10:56
oki c'est qu'une question d'assemblie alors? Y a pas une question d'OS aussi?
Sinon je viens de faire quelque petit tests pour confirmer par des fait se que tu disait à propos des perfs:
avec ta méthode pour 2400 lignes : 15 ms pour trier par nom
avec ma méthode pour 2400 lignes : 190 ms pour trier par nom
et la tu me diras "jte l'avais dis" et là je répondrais:
"Tu est peut être le jésus du .NET mais j'en suis le St thomas je ne crois que se que je vois!"
:)
Bon si j'ai bien compris je remplace mon objet par ta méthode static Orderer par contre encore un truc pourquoi tu fais ça dans ton foreach:
if (v != 0)
break;
Ca voudrais dire qu'on ne peut trier que sur une colone ou que l'ordre de trie est forcément l'ordre des paramètres?
jesusonline
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Membre
Dernière intervention
13 octobre 2010
29
15 avril 2008 à 10:09
oui et non, le marketing chez microsoft c'est du n'importe quoi :)

le compilateur C#3 compile pour la CLR2 donc tu peux utiliser les assemblies du framework 2.0.
Le compilateur C#3 est livré avec .net 3.5 donc aussi avec VS2008, c'est pour ca que VS2008 permet de "compiler" pour .net 2.0, en fait il ne fait que ne pas inclure les assemblies du framework 3.x.

Le framework 3.0 et 3.5 tourne sur la CLR2 également.
Afficher les 13 commentaires