動態定義的屬性我已經創建了FileInfo的對象一對夫婦的Comparer類,允許通過名稱和LastWriteTime屬性進行排序,但最好我想將它們合併爲一次課,讓我可以通過簡單地通過選擇的屬性名稱來比較/排序任何屬性。HOW TO:在.NET
不過,我不知道如何去了解這一點。我的比較器類當前包括:
Dim oX As FileInfo = CType(x, FileInfo)
Dim oY As FileInfo = CType(y, FileInfo)
Dim Result As Int16 = oX.Name.CompareTo(oY.Name)
我希望能夠使用存儲在_sortColumn變量中的屬性名稱替換Name屬性。
我期待的解決方案是很簡單的,但至今,我一直沒能弄明白!
解決方案:
我已經得到儘可能研究的反思,和整個的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))
在現實中,我只有兩列爲了處理這個問題,我可以稍微更加明確一些,而且性能更高。但是,這是一個學習工具,因爲它是一個現實世界的問題,所以我追求這個更復雜的解決方案。
應該使用lambda表達式 – 2009-10-08 12:09:26
@Fredrik容易。 – CJM 2009-10-08 13:40:02
@Arnis - 謹慎提供基於Lambda的解決方案? – CJM 2009-10-08 13:52:44