通过列表中Item的属性值从通用List中检索对象

时间:2014-07-11 15:11:14

标签: c# .net vb.net

我有一个继承自List(T)的自定义类。如何使用自定义属性从List中找到对象?

示例代码:

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 ,所有存储库(如本示例中的团队成员)都从此基础继承类。这不能说明基类的每​​个实例类都有不同的属性或方法用作过滤器。在我看来这样做是为了介绍我试图通过使用泛型集合来避免的相互依赖性和复杂性。

有什么建议吗?我试图解决一个非问题或从错误的角度接近这个问题。

顺便说一句,我同时使用C#和VBnet,所以任何一种语言的答案都可以

2 个答案:

答案 0 :(得分:0)

使用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()

答案 1 :(得分:0)

所以想法是你想要按某种条件'过滤'你的清单?试试这个(C#):

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

将扫描您的收藏并返回第一场比赛。或者,如果您想要所有匹配项,则可以使用FindAll,它返回IEnumerable。