Vb.net 按函数结果对列表排序
我想根据列表项中包含的函数的结果对列表进行排序。你打算怎么做 这里有一个例子。假设我有一个对象:Vb.net 按函数结果对列表排序,vb.net,list,sorting,reflection,Vb.net,List,Sorting,Reflection,我想根据列表项中包含的函数的结果对列表进行排序。你打算怎么做 这里有一个例子。假设我有一个对象: Public Class MyListObject Public MyText1 As String Public MyText2 As String Public Function AddSuffix(ByVal MySuffix As String) As String Return Mytext1 & MySuffix End Func
Public Class MyListObject
Public MyText1 As String
Public MyText2 As String
Public Function AddSuffix(ByVal MySuffix As String) As String
Return Mytext1 & MySuffix
End Function
End Class
(为了举例,过于简化)
之后,我将列出这些对象:
Dim ResultList As New List(Of MyListObject)
现在,例如,要按字段MyText1
值对列表进行排序,我使用了以下方法:
ResultList = ResultList.OrderBy(Function(x) GetType(MyListObject).GetField("MyText1").GetValue(x)).ToList
(使用反射,因此我可以将字段名作为字符串传递)
如何按函数AddSuffix
result对列表进行排序,同时传递参数MySuffix
我想它看起来像这样,但显然这不起作用
ResultList = ResultList.OrderBy(Function(x) GetType(MyListObject).GetField("AddSuffix(""_myCustomSuffix"")").GetValue(x)).ToList
我意识到,在这个例子中,函数几乎没有意义。实际代码要复杂得多,而且该函数确实会为每个列表项返回不同的可排序数据。我猜您有很好的理由使用反射,但我建议您避免使用反射,即使您有太多的字段和方法
ResultList = ResultList.OrderBy(Function(o) o.AddSuffix("_myCustomSuffix")).ToList
按名称调用方法的VB方式类似于这样(也未测试)
哇!这比我想象的要容易得多。这两个例子都适用于我的案例。非常感谢。最初,我使用反射按字段值排序-我需要以某种方式将字段名作为字符串传递。但是对于这个例子,我刚刚发现,我只需要传递函数的参数,而不是函数名本身。因此,没有必要进行反思。耶。
ResultList = ResultList.OrderBy(Function(o) CallByName(o,
"AddSuffix", CallType.Method, "_myCustomSuffix")).ToList