我有一个对象(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引用。
This Works,thanks! – Kumba 2011-05-26 03:20:31