按功能结果对列表进行排序

时间:2017-04-03 11:02:59

标签: 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 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。我意识到,在这个例子中,这个功能几乎毫无意义。实际代码要复杂得多,并且该函数确实为每个列表项返回不同的可排序数据。

1 个答案:

答案 0 :(得分:1)

我猜你有充分的理由使用反射,但即使你有太多的字段和方法,我也建议你避免使用它。

ResultList = ResultList.OrderBy(Function(o) o.AddSuffix("_myCustomSuffix")).ToList

按名称调用方法的VB方式是这样的(也没有测试过)

ResultList = ResultList.OrderBy(Function(o) CallByName(o,
                        "AddSuffix", CallType.Method, "_myCustomSuffix")).ToList
相关问题