gpt4 book ai didi

c# - C# LINQ 结果的差异

转载 作者:太空狗 更新时间:2023-10-29 23:06:15 24 4
gpt4 key购买 nike

当我这样做时:

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));
}
}

Here是关于 lambda 表达式中的闭包的更多信息。玩得开心! ;-)

关于c# - C# LINQ 结果的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35235444/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com