簡體   English   中英

通過列表中某項的屬性值從通用列表中檢索對象

[英]Retrieving an object from a generic List by property value of an Item in the list

我有一個自定義類,它繼承自List(of T)。 如何從具有自定義屬性的列表中找到對象?

樣例代碼:

Public class baseClass
    Property ID
End class

Public class Member
   Inherits BaseClass

   Property UserID As Integer
End Class

Public Class LCMSCollection(Of T As BaseClass)
    Inherits System.Collections.Generic.List(Of T)


End Class

我想要做的是通過UserId查找成員。 我希望這樣的事情:

Dim userId = 3
Dim members = MemberService.GetMembers(<some parameter>)
Dim member = members.<some method name>(userId)

在其他情況下,它將是:

Dim playerid = 6
Dim team = TeamService.GetTeam(<some parameter>)
Dim player  = teams.<some method name>(playerid)

我正在考慮一個委托並將Property更改為一個函數,但是我不知道如何進行。

目前我有這個:

Dim playerid = 6
Dim team = TeamService.GetTeam(<some parameter>)
Dim player = TeamService.GetPlayer(team, playerid)

由於幾個原因,這不能令人滿意。 首先,應該從集合中獲取項目,就像從列表中獲取項目一樣。 此外,在當前情況下,需要為集合的每種實例類型的每一種添加自定義方法。 為了避免這種情況,可以在基類廣告中創建一種通用方法getItem ,該廣告具有所有存儲庫,如本例中所示, TeamsMembers從該基類繼承。 但是,這不能說明以下事實,即基類的每個實例類都有不同的屬性或方法用作過濾器。 在我看來,這樣做是為了引入相互依賴性和復雜性,而我試圖通過使用通用集合來避免這種相互依賴性。

有什么建議么? 我是要解決一個非問題還是從錯誤的角度解決這個問題。

順便說一句,我同時使用C#和VBnet,所以用任何一種語言回答都可以

使用LINQ

Dim teams As List(Of Team) = [your team list]
Dim id As Integer = 10
Dim match As Team = (From item As Team In teams Select item Where item.ID = id).FirstOrDefault()

因此,您的想法是要根據某種條件“過濾”列表? 試試這個(C#):

Player match = PlayerList.Find(p => (p.ID == 5));

將掃描您的收藏並返回第一個匹配項。 或者,如果要所有匹配項,則可以使用FindAll,它返回IEnumerable。

暫無
暫無

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

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