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等)

 

posted @ 2022-04-12 22:46  Bridgebug  阅读(760)  评论(0编辑  收藏  举报