gpt4 book ai didi

c# - 解释 Linq Microsoft Select - 索引 [示例]

转载 作者:太空狗 更新时间:2023-10-30 00:08:44 26 4
gpt4 key购买 nike

我正在运行 Microsoft 的 101 LINQ Samples ,我很困惑这个查询如何知道如何分配正确的 int值到正确的 int领域:

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

我在 SO #336758 中看到之前的示例中存在错误,但更有可能是我遗漏了一些东西。

谁能解释一下这个以及编译器如何知道如何正确解释这些数据?

编辑:

好吧,我认为我的困惑来自启用选择 功能的 LINQ 扩展。 Func 和两个 int 参数 IEnumerable<TResult> IEnumerable<int>.Select(Func<int,int,TResult> selector)很可能是我缺乏理解的关键。

enter image description here

最佳答案

我不太确定你在问什么,但 Select从索引 0 开始遍历列表。如果当前索引处的元素值等于索引,它将设置 InPlace。匿名对象中的属性为真。我的猜测是上面的代码对于 3、6 和 7 打印为真,对吧?

如果您写下您不理解的内容,也会更容易解释。

Jon Skeet 撰写了一系列博客文章,其中他实现了 linq,阅读有关 Select 的文章这里:Reimplementation of Select

更新: 我在您对其他评论之一的评论中注意到,似乎是 lambda 而不是 linq 本身让您感到困惑。如果您阅读 Skeet 的博客文章,您会看到 Select有两个重载:

public static IEnumerable<TResult> Select<TSource, TResult>( 
this IEnumerable<TSource> source,
Func<TSource, TResult> selector)

public static IEnumerable<TResult> Select<TSource, TResult>(
this IEnumerable<TSource> source,
Func<TSource, int, TResult> selector)

Select with index 匹配第二个重载。如您所见,它是 IEnumerable<TSource> 的扩展。在你的例子中是 ints 的列表因此你调用SelectIEnumerable<int> 上和 Select 的签名变为:Select<int, TResult>(this IEnumerable<int> source, Func<int, int, TResult> selector) .如您所见,我更改了 TSource反对int ,因为那是你的 IEnumerable<int> 的通用类型.我还有 TResult因为您使用的是匿名类型。那么这可以解释某些部分吗?

关于c# - 解释 Linq Microsoft Select - 索引 [示例],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6204268/

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