簡體   English   中英

C#LINQ結果出現差異

[英]Discrepancy in C# LINQ results

當我這樣做:

currentPage = metadataResponse.ApplicationType.Pages.Find(
   page => page.SortOrder == ++currentPage.SortOrder);

currentPage值為null。

但是同樣的邏輯,當我將增量值分配給整數變量,然后嘗試獲取currentPage

int sortOrder = ++currentPage.SortOrder;
currentPage = metadataResponse.ApplicationType.Pages.Find(
    page => page.SortOrder == sortOrder);

currentPage被填充。

對於為什么一個有效而另一個無效,有沒有人有一個很好的答案?

注意:我假設Find方法應用於值集合。

在第一個代碼示例中,您正在為集合中的每個元素遞增currentPage (這是因為lambda表達式引入了從外部作用域捕獲的變量的閉包 - 請參閱下面的代碼塊以獲取更多信息)。 在第二個代碼示例中, currentPage僅增加一次。 看看以下程序的行為:

class Program
{
    static void Main(string[] args)
    {
        Func1();
        Console.WriteLine("\n");
        Func2();

        Console.ReadKey();
    }

    private static void Func1()
    {
        int i = 0;
        var list = new List<int> { 1, 2, 3 };
        list.ForEach(x => Console.WriteLine(++i));
    }

    private static void Func2()
    {
        int i = 0;
        int j = ++i;
        var list = new List<int> { 1, 2, 3 };
        list.ForEach(x => Console.WriteLine(j));
    }
}

以下是有關lambda表達式中閉包的更多信息。 玩得開心! ;-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM