【问题标题】:Sort a list by a function results按函数结果对列表进行排序
【发布时间】:2017-08-28 05:17:43
【问题描述】:

我想根据列表项中包含的函数的结果对列表进行排序。该怎么做呢?

这是一个例子。假设我有以下对象:

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

【问题讨论】:

    标签: vb.net list sorting reflection


    【解决方案1】:

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

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

    VB通过名称调用方法的方式是这样的(也未测试)

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

    【讨论】:

    • 哇。这比我想象的要容易得多。这两个例子都适用于我的情况。谢谢!!最初我使用反射来按字段值排序 - 我需要以某种方式将字段名称作为字符串传递。但是对于这种情况,我只是想通了,我只需要传递函数的参数而不是它自己的函数名。因此不需要反思。耶。
    猜你喜欢
    • 1970-01-01
    • 2011-10-31
    • 2013-09-08
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    • 2011-09-28
    相关资源
    最近更新 更多