Я создал пару классов Comparer для объектов FileInfo, чтобы разрешить сортировку по свойствам Name и LastWriteTime, но в идеале я хотел бы объединить их в один класс, чтобы я может сравнивать/сортировать по любому свойству, просто пройдя через выбранное имя свойства.Практическое руководство. Динамически определенные свойства в .NET.
Однако я не знаю, как это сделать. Мой класс Comparer ток включает в себя:
Dim oX As FileInfo = CType(x, FileInfo)
Dim oY As FileInfo = CType(y, FileInfo)
Dim Result As Int16 = oX.Name.CompareTo(oY.Name)
Я хочу, чтобы иметь возможность заменить свойство Имени с именем свойства, хранящимся в переменной _sortColumn.
Я ожидаю, что решение будет довольно простым, но пока я не смог понять это!
Решение:
я уже дошел до исследования Reflection, и он наткнулся на PropertyInfo. Но решение Fredriks сократить свой поиск и при условии, немного структуры, и я пришел к этому решению (VB.Net), который, кажется, работает хорошо:
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))
В действительности, у меня есть только две колонки чтобы иметь дело с этим, я мог бы быть немного более явным и более профессиональным. Но это учебное средство, так как это проблема реального мира, поэтому я преследовал это более сложное решение.
Должно быть проще использовать lambdas –
@Fredrik - дважды в течение 24 часов - спасибо. – CJM
@Arnis - Зачем предлагать решение на основе лямбда? – CJM