如何在VB中过滤泛型集合中具有指定类型的对象

时间:2012-01-03 10:29:43

标签: vb.net generic-list

给出以下类结构:

  • Class Base {id}
  • Class Derived1:Base {}
  • Class Derived2:Base {}
  • Class MyList:System.Collection.Generic.List(Of Base)
  • Class Consumer {list as MyList}

(编辑:将有超过2个派生类,为简单起见,我只列出了2个)

我将以下属性添加到MyList,尝试回答诸如“找出具有指定类型的元素数量,例如Derived1,在MyList中?”的问题。

Public Overloads ReadOnly Property Count(ByVal objType As System.Type) As Integer
    Get
        Dim cnt As Integer = 0
        For Each o As Object In Me
            If (o IsNot Nothing) And (o.GetType.Equals(objType)) Then cnt += 1
        Next
        Return cnt
    End Get
End Property

Q1:还有什么需要改进的吗?如果是,请告知。

提前致谢

1 个答案:

答案 0 :(得分:0)

如果您使用.NET 3.5,可以使用Linq:

Dim myList As MyList;
...
Dim count = myList.OfType(Of Derived1).Count();

根本不需要添加属性。