在VB.NET中是否有IEnumerable的计数方法?

在VB.NET中是否有IEnumerable的计数方法?,vb.net,count,ienumerable,Vb.net,Count,Ienumerable,在C#中,如果我有以下对象: IEnumerable<Product> products; 但是在VB.NET中似乎没有这样的方法。有人知道如何在VB.NET中实现相同的结果吗?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 在.net的更高版本中,有一个名为Coun

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

IEnumerable<Product> products;

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

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

在.net的更高版本中,有一个名为
Count()
的扩展方法与
IEnumerable
关联,如果基础枚举器支持这两种方法中的任何一种,它将使用
IList.Count()
ICollection.Count()
,如果它不支持,则将迭代地对项目进行计数


一个重要的注意事项并不总是考虑到这一点:虽然
IEnumerable
通常可以替代
IEnumerable
,但实现
IList
但不实现
ICollection
的类型在用作
IEnumerable
时可以有效计数,但当强制转换为
IEnumerable
时就不是了(即使该类将支持
IList.Count()
方法返回正确的结果,系统不会查找该结果——而是查找不会实现的
IList

一般来说,除非基础集合支持(例如List),否则IEnumerable不会有计数

考虑一下通用IEnumerable实现计数方法需要发生什么。由于IEnumerable仅在请求数据时执行,因此为了执行计数,它需要迭代,直到最后跟踪找到的元素数


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

请参见link.VB与C具有相同的扩展方法集,假设您有.NET 3.5+,则导入System.Linq和Count方法将可用。IEnumerable始终具有
.Count()
作为扩展方法。如果基础集合是
ICollection
并且具有
Count
属性,
Count()
调用它。如果它没有,
Count()
确实会迭代整个集合。@TsahiAsher那么你说的话怎么会使我的答案不正确呢?据我所知,IEnumerable接口没有提供计数方法。当然,扩展方法可以解决这个问题。你可以为你想要的任何东西编写扩展方法。按照这种逻辑,IEnumerable从来没有计数,regardles如果忽略扩展方法,则必须将其转换成集合(如果可能的话)。但是如果考虑扩展方法,总是有一个No.To()扩展方法,它是.NETFramework的一部分。
   Dim x As New List(Of String)
   Dim count As Integer

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

   count = x.Count