gpt4 book ai didi

c# - 有人可以解释此Linq查询吗?

转载 作者:太空宇宙 更新时间:2023-11-03 18:00:53 24 4
gpt4 key购买 nike

我从msdns 101 linq示例中得到了这个linq示例:

public void Linq12() {
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

var numsInPlace = numbers.Select((num, index) => new {Num = num, InPlace = (num ==
index)});

Console.WriteLine("Number: In-place?");
foreach (var n in numsInPlace) {
Console.WriteLine("{0}: {1}", n.Num, n.InPlace);
}
}


这是我的问题:


什么是(数字,索引)部分?可以将它们称为a,b之类的东西吗?我可以要多少个名字?
编译器如何确定匿名类型将是什么类型?
=>的作用是什么?
必须始终至少有一个参数。例如,在下面的linq查询中,n是一个参数,或者此选择与另一个参数不同(Select(num,index))

int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

var numsPlusOne =
from n in numbers
select n + 1;
}

最佳答案

1)这些是传递给此Enumerable.Select重载使用的Func<TSource, Int32, TResult>的参数。

发生的情况是,编译器自动创建了一个lambda,该lambda从您的可枚举值及其所生成函数的索引中传递一个“ <T>”。您将其命名为“ num”和“ index”,“ num”是数组中的整数,“ index”是数组中的索引。您可以为它们命名,但是它们必须存在于Select方法所使用的Func中(在这种情况下,总是有两个,第二个是int)。

2)编译器为您创建一个NEW类型。匿名类型就是这样-匿名类型是使用与您在其中分配的类型相对应的属性生成的,在本例中为int(Num)和bool(InPlace)。类型取决于所设置的内容。

3)这是Lambda Operator。它使您可以创建lambda表达式,该表达式是内联定义的函数,没有名称返回单个值。

4)在第二种情况下,LINQ正在调用Select的重载,该重载需要一个Func<TSource,TResult>,因此您只有一个参数。 Enumerable.Select有两个版本。

关于c# - 有人可以解释此Linq查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1506431/

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