[英]How do you pass a property as a parameter
我有一個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)
您可以在.NET Framework中使用Reflection來完成任務。
首先,排序功能(包括如何獲取價值的示例,排序是您的業務)。
Public Sub SortPlayer(list As List(Of Player), prop As Reflection.PropertyInfo)
...
Dim value = prop.GetValue(list(1), Nothing)
...
End Sub
現在如何稱呼它:
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
可以在例如NotifyOfPropertyChange(()=> Name)中找到GetPropertyName
實現。
注意
JaredPar解決方案可能更好,但這是問題的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.