如何计算列表中所有共享相同接口的不同对象?

时间:2011-05-26 01:54:13

标签: vb.net

我有一个对象(MyObj),它本身将保存各种类型的其他对象的列表,我想在将它们添加到MyObj时对它们进行计数。这是简单的解释,反正......

我有一个所有子对象都同意的接口(MyInterface)。 MyObj具有List(Of MyInterface)属性,可以添加所有子对象。 MyInterface将公开一个属性,让我可以找出每个对象的子类型(子对象根本不会从MyObj继承)。

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

我能想到计算对象的唯一理智方式是MyObj中一个非常大的结构,它使用字节来保存计数(我将永远不会超过列表中任何给定子对象的255个MyObj)。但是,即使使用字节,这个结构在内存中也会大约100-200字节(我有很多子对象),而且我预计会有相当数量的MyObj个副本在运行。

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

我想知道的是,有没有一种方法来查询列表并只计算特定类型的对象,而不是计算每个对象添加到列表中的数量?我不需要将它存储在任何地方,因为它是动态的,比如查询数据库并要求计算特定列或记录类型。

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


编辑:我想在Linq中想要这样的东西,但我对如何在VB中格式化它感到困惑(我不是C#人):

From i in MyObj.MyList Group i by i.GetType into g Let c as Int32 = g.Count()

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

1 个答案:

答案 0 :(得分:1)

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