gpt4 book ai didi

c# - "i"在此 LINQ 语句中的何处获取其值?

转载 作者:太空狗 更新时间:2023-10-30 01:03:45 26 4
gpt4 key购买 nike

我对此 select LINQ 语句的行为有点困惑。在 LOOK HERE 注释下方,您可以看到一个 select LINQ 语句。该选择语句位于 employees 集合中。因此,它应该只接受 x 作为输入参数。出于好奇,我将 i 传递给委托(delegate),它起作用了。当它遍历 select 时,它首先分配 0,然后递增 1。结果可以在本文末尾看到。

变量 i 从哪里得到它的值?首先,为什么它允许我使用范围内无处可去的变量 i 。它不在全局范围内,也不在本地 Main 方法中。感谢任何帮助来理解这个谜团。

namespace ConsoleApplication
{
using System;
using System.Collections.Generic;
using System.Linq;

public class Employee
{
public int EmployeedId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}

class Program
{
static void Main(string[] args)
{
var employees = new List<Employee>()
{
new Employee() { FirstName = "John", LastName = "Doe" },
new Employee() { FirstName = "Jacob", LastName = "Doe" }
};

// LOOK HERE...
var newEmployees = employees.Select((x, i) => new { id = i, name = x.FirstName + " " + x.LastName });

newEmployees.ToList().ForEach(x => { Console.Write(x.id); Console.Write(" "); Console.WriteLine(x.name); });

Console.ReadKey();
}
}
}

结果是

enter image description here

0 John Doe
1 Jacob Doe

最佳答案

Enumerable.Select具有投影序列中元素的当前索引的重载。还有 Enumerable.WhereEnumerable.SkipWhile/TakeWhile有它。您可以像 for 循环中的循环变量一样使用它,这有时很方便。

一个使用索引创建匿名类型以将长列表分为 4 组的示例:

var list = Enumerable.Range(1, 1000).ToList();

List<List<int>> groupsOf4 = list
.Select((num, index) => new { num, index })
.GroupBy(x => x.index / 4).Select(g => g.Select(x => x.num).ToList())
.ToList(); // 250 groups of 4

或一个只选择偶数索引的Where:

var evenIndices = list.Where((num, index) => index % 2 == 0);

同样重要的是,您可以使用这些仅在方法语法中转换索引的重载。 LINQ 查询语法不支持它。

关于c# - "i"在此 LINQ 语句中的何处获取其值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26538299/

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