动态定义的属性我已经创建了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