Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 按函数结果对列表排序_Vb.net_List_Sorting_Reflection - Fatal编程技术网

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