Vb.net 如何计算共享同一界面的列表中的不同对象?

Vb.net 如何计算共享同一界面的列表中的不同对象?,vb.net,Vb.net,我有一个对象(MyObj),它本身将包含各种类型的其他对象的列表,我想在它们添加到MyObj时对它们进行计数。这就是简单的解释,无论如何 我有一个所有子对象都同意的接口(MyInterface)MyObj有一个所有子对象都添加到的列表(MyInterface)属性MyInterface将公开一个属性,该属性允许我确定每个对象的子类型(子对象根本不从MyObj继承) 但我想在将这些子对象添加到列表中时对它们进行计数,我正在尝试找到一种好的方法。我不需要担心计数的递减,因为我将模拟字符串的行为,只要

我有一个对象(
MyObj
),它本身将包含各种类型的其他对象的列表,我想在它们添加到
MyObj
时对它们进行计数。这就是简单的解释,无论如何

我有一个所有子对象都同意的接口(
MyInterface
MyObj
有一个所有子对象都添加到的
列表(MyInterface
)属性
MyInterface
将公开一个属性,该属性允许我确定每个对象的子类型(子对象根本不从
MyObj
继承)

但我想在将这些子对象添加到列表中时对它们进行计数,我正在尝试找到一种好的方法。我不需要担心计数的递减,因为我将模拟字符串的行为,只要创建一个新的
MyObj
实例(如果它发生变化),所有计数都将从0开始。这会对垃圾收集器造成一些影响,但我认为这将允许编写更简单(更安全)的代码

我能想到的唯一合理的对象计数方法是
MyObj
中的一个非常大的结构,它使用字节来保存计数(我在
MyObj
中的列表中的任何给定子对象都不会超过255个)。但是,即使使用字节,这个结构在内存中也会有大约100-200字节大(我有那么多子对象),我预计也会有相当数量的
MyObj
拷贝

我还需要一个大的
Select Case
,以知道在添加新的子对象时要增加哪个count属性。这似乎有点难看,尽管我已经多次使用这种方法

我想知道的是,有什么方法可以查询列表并只计算特定类型的对象,而不是在添加到列表时计算每个对象?我不需要将其存储在任何地方,因为它是动态的,就像查询数据库并请求特定列或记录类型的计数一样

我怀疑Linq可以做到这一点,但Linq也相当慢。还有其他方法吗?也许是某种谓词?


编辑:我想在Linq中使用类似的东西,但我对如何在VB中设置格式有点困惑(我不是C#guy):

到目前为止就是这样。我还在谷歌上搜索,但是我得到了太多的C#和SQL引用

MyObj.MyList.OfType(Of Int32)().Count()
MyObj.MyList.OfType(Of Int32)().Count()