Я создал пару классов Comparer для объектов FileInfo, чтобы разрешить сортировку по свойствам Name и LastWriteTime, но в идеале я хотел бы объединить их в один класс, чтобы я мог сравнивать / сортировать по любому свойству просто, передавая через имя выбранного свойства.
Однако я не знаю, как это сделать. Мой класс класса сравнения включает в себя:
Dim oX As FileInfo = CType(x, FileInfo)
Dim oY As FileInfo = CType(y, FileInfo)
Dim Result As Int16 = oX.Name.CompareTo(oY.Name)
Я хочу иметь возможность заменить свойство 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))
На самом деле у меня есть только два столбца, поэтому я мог бы быть немного более явным и более производительным. Но это средство обучения в той же степени, что и проблема реального мира, поэтому я решил найти более сложное решение.