【发布时间】:2017-03-31 22:27:52
【问题描述】:
我做了一个函数来生成奇数:
static IEnumerable<int> OddNumbers()
{
int n = 1;
while (true)
yield return 1 + 2 * (n++ - 1);
}
如何查看和过滤此列表?我正在尝试删除某个数字factor 的所有倍数,我是这样写的:
using (var oddNumbers = OddNumbers().GetEnumerator())
{
oddNumbers.MoveNext();
int factor = oddNumbers.Current;
yield return factor;
oddNumbers = oddNumbers.Where(x => x % factor != 0);
}
但我被告知
The type arguments for method `System.Linq.Enumerable.Where<TSource>(
this System.Collections.Generic.IEnumerable<TSource>,
System.Func<TSource,bool>)' cannot be inferred from the usage.
Try specifying the type arguments explicitly`
【问题讨论】:
-
声明
oddNumbers为:IEnumerable<int> oddNumbers=OddNumbers();。然后使用using中的另一个变量作为枚举器。 -
oddNumbers是IEnumerator<int>,但Where需要IEnumerable<int>。您可以使用OddNumbers().Where(x => x % factor != 0)。 -
呃……所有这些操作看起来都无限的可怕……
-
oddNumbers是 IEnumerator,但不是 IEnumerable。我看不出你怎么能在上面执行Where。 -
如果你能告诉我们你试图解决的整个问题会很好。
标签: c# generator ienumerable