2012-01-03 1 views
0

дал следующий класс структуры:Как отфильтровать объект с указанным типом в общих собраниях в VB

  • Class Base {ID}
  • Класс Derived1: Base {}
  • Класс Derived2: Base {}
  • класса MyList: System.Collection.Generic.List (Of Base)
  • класса Consumer {список в MyList}

(edit: будет более двух производных классов, я просто перечислял только 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: Есть ли что-нибудь для улучшения? Если да, пожалуйста, сообщите.

Заранее спасибо

ответ

0

В случае, если вы используете .NET 3.5 вы можете использовать Linq:

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

Нет необходимости добавлять свойство вообще.

+0

Спасибо за информацию, но что, если вопрос: «Пожалуйста, выберите из MyList с типом Derived1, а также ID = 'abc'" (поле id из базового класса)? (Идентификатор Derived1 может быть равен ID Derived2) и (MyList не имеет проверки уникальности поля «ID») –