C#Linq中的Select方法的说明
Enumerable.Range(0, 20).Select(i =>
{
long x = 1;
for (int j = 1; j <= i; j++)
{
x *= j;
}
Console.WriteLine(i + "计算完成");
return x;
});
当你尝试运行上面的代码,会发现并没有输出,这是为什么呢?
根据MSDN上的说法是:此方法是使用延迟执行实现的。 即时返回值是一个对象,该对象存储执行操作所需的所有信息。 此方法表示的查询在枚举对象之前不会执行,方法是通过直接调用 GetEnumerator
方法或在 Visual Basic 中使用视觉C#对象中的 foreach
或 For Each
来枚举对象。
意思就是它只是存储了一个操作,相当于存储了一个委托,只有在枚举时才执行委托。
即:将结果ToList时就会产生输出,因为ToList是会枚举对象
Enumerable.Range(0, 20).Select(i =>
{
long x = 1;
for (int j = 1; j <= i; j++)
{
x *= j;
}
Console.WriteLine(i + "计算完成");
return x;
}).ToList();
PS:不只是Select,只要是返回类型为IEnumerable的都是一样 (Where,Union,Zip,Skip,TakeWhile等)