[英]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.