我想按列表项中包含的函数的结果对列表进行排序。怎么会这样做?
这是一个例子。让我们说我有一个以下的对象:
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
结果对此列表进行排序,同时传递参数MySuffix
?
我想它会看起来像这样,但显然这不起作用
ResultList = ResultList.OrderBy(Function(x) GetType(MyListObject).GetField("AddSuffix(""_myCustomSuffix"")").GetValue(x)).ToList
PS。我意识到,在这个例子中,这个功能几乎毫无意义。实际代码要复杂得多,并且该函数确实为每个列表项返回不同的可排序数据。
答案 0 :(得分:1)
我猜你有充分的理由使用反射,但即使你有太多的字段和方法,我也建议你避免使用它。
ResultList = ResultList.OrderBy(Function(o) o.AddSuffix("_myCustomSuffix")).ToList
按名称调用方法的VB方式是这样的(也没有测试过)
ResultList = ResultList.OrderBy(Function(o) CallByName(o,
"AddSuffix", CallType.Method, "_myCustomSuffix")).ToList