2011-05-26 21 views
0

我有一个对象(MyObj),它本身将包含各种类型的其他对象的列表,我想在将它们添加到MyObj中时对它们进行计数。这是简单的解释,反正...如何计算列表中的所有共享相同接口的不同对象?

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

但我想计数这些子对象,因为它们被添加到列表中,我试图找到一个好方法来做到这一点。我不需要担心递减计数,因为我将模仿String的行为,并且只要创建了一个新的实例MyObj,如果它发生变化,所以我的所有计数都将从0开始。这会造成垃圾收藏家一点,但我认为这将允许更简单(和更安全)的代码。

我能想到的唯一可以计算对象的方法是MyObj中的一个非常大的结构,它使用字节来保存计数(我绝不会超过列表中列表中任何给定子对象的255)。但是,即使使用字节,这个结构在内存中的大小也会是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() 

就是这样。我仍然使用Google,但是我得到了太多的C#和SQL引用。

回答

1
MyObj.MyList.OfType(Of Int32)().Count() 
+0

This Works,thanks! – Kumba 2011-05-26 03:20:31

相关问题