【发布时间】:2016-02-26 13:37:05
【问题描述】:
我有一个类 RekenReeks,它返回从 2 开始的数字,乘以 2。所以 {2,4,8,16,32,64}
现在我了解了 TakeWhile 和 SkipWhile 方法以及 LINQ。
所以我创建了 3 个变量,它们应该存储完全相同,但我的 Console.WriteLine 只打印 selection1 而不是 2 和 3。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
RekenReeks reeks = new RekenReeks(2, n => n * 2);
var selection = from i in reeks
where i > 10
&& i < 1000
select i;
var selection2 = reeks.TakeWhile(n => n < 1000 && n > 10);
var selection3 = reeks.SkipWhile(n => n > 1000 && n < 10);
foreach (int i in selection)
{
Console.WriteLine("selection1 {0}",i);
}
foreach (int i in selection2)
{
Console.WriteLine("selection2 {0}", i);
}
foreach (int i in selection3)
{
Console.WriteLine("selection3 {0}", i);
}
Console.ReadLine();
}
}
public class RekenReeks : IEnumerable<int>
{
Func<int, int> getNew;
int number;
public RekenReeks(int starton, Func<int, int> getNewThing)
{
getNew = getNewThing;
number = starton;
}
public IEnumerator<int> GetEnumerator()
{
yield return number;
for (; ; )
{
yield return getNew(number);
number = getNew(number);
}
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
}
}
【问题讨论】:
-
您正在多次枚举您的
IEnumerable。 -
所以应该通过创建
IEnumerable的3个实例来解决? -
可以的。
-
@DanielA.White 你在说什么?多重枚举没问题,你没有其他选择,无穷无尽的序列。
标签: c# linq lambda expression