J'ai créé deux classes de comparaison pour les objets FileInfo afin de permettre le tri par propriétés Name et LastWriteTime, mais idéalement, je voudrais les combiner en une seule classe, de sorte que je peut comparer/trier par n'importe quelle propriété simplement en passant par le nom de propriété choisi.Comment: propriétés définies dynamiquement dans .NET
Cependant, je ne sais pas comment procéder. Mon actuelle classe comprend comparateur:
Dim oX As FileInfo = CType(x, FileInfo)
Dim oY As FileInfo = CType(y, FileInfo)
Dim Result As Int16 = oX.Name.CompareTo(oY.Name)
Je veux être en mesure de remplacer la propriété Name avec le nom de la propriété stockée dans la variable _sortColumn.
Je m'attends à ce que la solution soit plutôt simple, mais je n'ai pas encore réussi à la comprendre!
Solution:
je avais déjà eu aussi loin que la recherche de réflexion, et avait trébuché à travers PropertyInfo. Mais la solution Fredriks coupé ma recherche et a fourni un peu de la structure, et je suis venu avec cette solution (VB.Net) qui semble fonctionner très bien:
Dim oX_PI As PropertyInfo = CType(x, FileInfo).GetType.GetProperty(_sortColumn)
Dim oY_PI As PropertyInfo = CType(y, FileInfo).GetType.GetProperty(_sortColumn)
Dim Result As Int16 = oX_PI.GetValue(x, Nothing).CompareTo(oY_PI.GetValue(x, Nothing))
En réalité, je n'avoir plus que deux colonnes pour faire face à ce que je pourrais être un peu plus explicite et t hus plus performant. Mais c'est un véhicule d'apprentissage autant que c'est un problème du monde réel, j'ai donc poursuivi cette solution plus sophistiquée.
Devrait être plus facile en utilisant lambdas –
@Fredrik - deux fois en 24 heures - merci. – CJM
@Arnis - Vous souhaitez proposer une solution Lambda? – CJM