簡體   English   中英

如何傳遞屬性作為參數

[英]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解決方案可能更好,但這是問題的答案。

我建議您注意List(Of T).Sort方法(Comparison(Of T))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM