在 C# 中,如果我有以下对象:
IEnumerable<Product> products;
如果我想得到它包含多少元素,我使用:
int productCount = products.Count();
但看起来VB.NET中没有这样的方法。有人知道如何在 VB.NET 中实现相同的结果吗?
在 C# 中,如果我有以下对象:
IEnumerable<Product> products;
如果我想得到它包含多少元素,我使用:
int productCount = products.Count();
但看起来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()
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>
而不是实现。
一般来说,IEnumerable 不会有 Count,除非底层集合支持(例如 List)。
想一想通用 IEnumerable 实现 Count 方法需要发生什么。由于 IEnumerable 仅在请求数据时执行,因此为了执行计数,它需要遍历直到结束,以跟踪它找到了多少元素。
通常,此迭代将结束,但您可以设置一个永远循环的查询。使用 IEnumerable 计数要么在时间上非常昂贵,要么很危险。