private IEnumerable<string> Tables
{
get
{
yield return "Foo";
yield return "Bar";
}
}
假设我想要迭代这些并写一些类似于processing #n of #m的东西。
有没有一种方法可以让我在不进行主迭代的情况下求出m的值?
我希望我讲清楚了。
private IEnumerable<string> Tables
{
get
{
yield return "Foo";
yield return "Bar";
}
}
假设我想要迭代这些并写一些类似于processing #n of #m的东西。
有没有一种方法可以让我在不进行主迭代的情况下求出m的值?
我希望我讲清楚了。
当前回答
我使用这样的代码,如果我有字符串列表:
((IList<string>)Table).Count
其他回答
我的一个朋友有一系列的博客文章来说明为什么你不能这样做。他创建了一个返回IEnumerable的函数,每次迭代都会返回下一个质数,一直到ulong。MaxValue,下一项直到您请求它时才计算。一个简单的问题:返回了多少项?
以下是一些帖子,但它们有点长:
Beyond Loops(提供一个在其他帖子中使用的初始EnumerableUtility类) 迭代应用(初始实现) 疯狂的扩展方法:ToLazyList(性能优化)
我发现最好的方法是把它转换成一个列表。
IEnumerable<T> enumList = ReturnFromSomeFunction();
int count = new List<T>(enumList).Count;
简化所有答案。
IEnumerable没有Count函数或属性。为了得到这个,你可以存储count变量(例如,使用foreach)或使用Linq来获得count。
如果你有:
IEnumerable < >产品
然后:
声明:"using System.Linq;"
数:
.Count products.ToList ()
它可能不会产生最好的性能,但你可以使用LINQ来计算IEnumerable中的元素:
public int GetEnumerableCount(IEnumerable Enumerable)
{
return (from object Item in Enumerable
select Item).Count();
}
你也可以这样做:
Tables.ToList<string>().Count;