Pour l'info, je ne suis plus étudiant! :king:
En revanche, je posais la question pour un de mes projets. Maintenant il ne me reste plus qu'à adapter les explications à mon projet... :D
Version imprimable
On est tous sur ce forum pour apprendre, de toutes façons :)
Excuse-moi d'insister, mais je te déconseille fortement d'utiliser la réflexion de cette façon. Parce que c'est lourd, pas performant, que t'y comprendras plus rien quand tu reliras ton code dans 6 mois, et surtout parce que c'est pas fait pour ça.
Ton scénario est peut être de type sérialisation / désérialisation, ce qui expliquerait que tu passes par les noms des propriétés pour éditer leurs valeurs. Quand bien même, je vois pas à quoi ça te sert d'avoir une variable du type de ta propriété, si c'est pour l'affecter de suite à cette propriété. Un SetValue(...) suffit. C'est fait pour ça. Sans compter qu'il existe des tas de classe dans le framework qui se chargent de sérialiser / désérialiser les objets.
En fait je récupère une liste1 en base de données.
Cette liste1 est composée de 10 colonnes de nom col0 à col9.
Je récupère une liste2 toujours en base de données.
Cette liste2 est composée de 2 colonnes.
La 1ère colonne comporte des noms de colonne de la liste1.
La 2nde colonne comporte des valeurs que ma liste1 peut contenir dans la colonne associée.
Petit exemple:
Ma liste1 comporte 9 lignes.
Ma 1ère ligne aura les valeurs val00 à val09.
...
Ma 9ème ligne aura les valeurs val90 à val99.
Ma liste2 est la suivante:
NomColonne ValeurNonVoulue
Col33 Val33
Col55 AutreValeur55
Je parcours les lignes de la liste1.
Pour chaque ligne, je regarde s'il n'y a une colonne dont le couple (nom colonne, valeur) est renseignée dans la liste2. Si c'est le cas, je supprime la ligne en question de ma liste1.
Du coup, je récupère le type car je ne peux comparer 2 valeurs que si elles sont du même type (ou de types comparables).
Dans cet exemple, je supprime la ligne 3 de ma liste1.
Voilà pourquoi je fais comme ça, bien que ce soit dommage pour la beauté du code... 8O
M'a l'air bien compliqué tout ça :)
Concrètement, quand tu parles de "liste" et de "lignes", ça correspond à quoi en C# ? A ça ?
Et de toutes façon, plutôt que comparer un string transformé en dateTime (que tu récupèrerais de liste2) avec un DateTime(venant de liste1), tu peux faire l'inverse : à savoir transformer ton DateTime en string, et voir si c'est égal à ce que tu trouves dans liste2. (je dis datetime, mais c'est valable pour tout type bien sûr). Tu vois l'idée ? Et là, pas besoin de l'artillerie lourde qu'est la réflexion :)Code:
1
2
3
4
5
6
7
8 List<Truc> liste1; // ta liste class Truc // ta ligne { public int Col0; public string Col1; ... public double Col9; }
Ca t'aura permis de voir la reflexion :)
La prochaine étape, ça sera CodeDom ^^. Ca permet de générer du code, de le compiler, etc ... Assez utile pour réaliser des extensions dans Visual Studio.