1

在 C# 中,如果我有以下对象:

IEnumerable<Product> products;

如果我想得到它包含多少元素,我使用:

int productCount = products.Count();

但看起来VB.NET中没有这样的方法。有人知道如何在 VB.NET 中实现相同的结果吗?

4

3 回答 3

3

Count在 VB.NET 中可用:

   Dim x As New List(Of String)
   Dim count As Integer

   x.Add("Item 1")
   x.Add("Item 2")

   count = x.Count

http://msdn.microsoft.com/en-us/library/bb535181.aspx#Y0

于 2012-06-25T10:11:02.103 回答
0

在更高版本的 .net 中,有一个名为Count()associated with的扩展方法,如果底层枚举器支持其中任何一个IEnumerable<T>,它将使用IList<T>.Count()ICollection.Count(),如果不支持则迭代地计算项目。

一个重要的警告并不总是考虑到这一点:虽然 anIEnumerable<DerivedType>通常可以替代 an IEnumerable<BaseType>,但实现IList<DerivedType>但未实现的类型ICollection在用作 an 时可能会被有效计数IEnumerable<DerivedType>,但在强制转换为时不会被有效计数IEnumerable<BaseType>(即使该类将支持一个IList<DerivedType>.Count()方法将返回正确的结果,系统不会寻找它——它会寻找,IList<BaseType>而不是实现。

于 2012-06-25T15:41:39.473 回答
0

一般来说,IEnumerable 不会有 Count,除非底层集合支持(例如 List)。

想一想通用 IEnumerable 实现 Count 方法需要发生什么。由于 IEnumerable 仅在请求数据时执行,因此为了执行计数,它需要遍历直到结束,以跟踪它找到了多少元素。

通常,此迭代将结束,但您可以设置一个永远循环的查询。使用 IEnumerable 计数要么在时间上非常昂贵,要么很危险。

于 2013-06-25T14:56:50.927 回答