我有一个对象(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引用。
答案 0 :(得分:1)
MyObj.MyList.OfType(Of Int32)().Count()