Vb.net 如何将属性作为参数传递

Vb.net 如何将属性作为参数传递,vb.net,properties,parameters,Vb.net,Properties,Parameters,我有一个类,Player,它有6个左右的属性,都是整数。对于我的项目,需要进行一些排序,我希望能够编写一个函数,该函数接受一个玩家列表和一个属性,通过返回一个按传递的属性排序的玩家列表对其进行排序: Class Player Public Property PID Public Property RunsScored PublicProperty BallsFaced End Class Class AnotherClass Public Shared Player

我有一个类,Player,它有6个左右的属性,都是整数。对于我的项目,需要进行一些排序,我希望能够编写一个函数,该函数接受一个玩家列表和一个属性,通过返回一个按传递的属性排序的玩家列表对其进行排序:

Class Player
   Public Property PID
   Public Property RunsScored
   PublicProperty  BallsFaced
End Class

Class AnotherClass
    Public Shared PlayerList As New List(Of Player)

    Public Player sort(list As List(Of Player), prop As Property)
        'sort the list by prop
        Return sorted list
    End Function

但我不知道这是不是一个东西,它有名字吗?甚至可能吗?

最好的方法是接受一个委托,该委托为集合中的每个对象返回一个属性

Public Player sort(list As List(Of Player), func As Func(Of Player, Object))
  'sort the list by prop
  Return sorted list
End Function
然后可以在调用站点使用lambda来指定要使用的属性

sort(list, Function(player) player.PID)
您可以使用来完成任务

首先是排序功能(包括如何获取值的示例,排序是您的业务)

现在如何称呼它:

Public Sub CallSort()
    Dim MyList As New Generic.List(Of Player)
    ...
    SortPlayer(MyList, GetType(Player).GetProperty("RunsScored"))
End Sub
问题是,按字符串列出的name属性在运行时可能会导致问题。因此,函数是必要的

Public Sub CallSort2()
    Dim MyList As New Generic.List(Of Player)
    SortPlayer(MyList, GetType(Player).GetProperty(GetPropertyName(Function() MyList(0).PID)))
End Sub
GetPropertyName
实现可以在中找到,例如

注意

解决方案可能更好,但这是问题的答案


我建议你注意一下

听起来不错,但我真的不明白你的意思,做这一切是否有一个名字,以便我可以研究它?@user1091236如果你想研究它,请查找术语“lambda表达式”。这里有一个不错的网站要看谢谢,我会看看的。我只见过lambda是波的波长的符号!啊,我看过这个方法,但这是一个大学项目,你需要证明你实际上可以为自己进行排序。
Public Sub CallSort2()
    Dim MyList As New Generic.List(Of Player)
    SortPlayer(MyList, GetType(Player).GetProperty(GetPropertyName(Function() MyList(0).PID)))
End Sub