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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM