C# 将对象列表转换为c中的数组-“";x=>;x、 名称“;语法意义?

C# 将对象列表转换为c中的数组-“";x=>;x、 名称“;语法意义?,c#,arrays,lambda,C#,Arrays,Lambda,我正在寻找一种解决方案,将列表中每个对象的属性转换为一些数组,最终我找到了 然后我找到了这个密码 MyList.Select(x=>x.Name).ToArray(); 这是解决我问题的办法。但我还是不明白变量“x”的意思。有谁能简单地向我解释一下这个语法是如何工作的吗?这是一个简单的例子 lambda表达式是一个匿名函数,可用于 创建委托或表达式树类型。通过使用lambda 表达式,您可以编写可以作为 参数或作为函数调用的值返回。兰姆达 表达式对于编写LINQ查询特别有用 表达。要创建

我正在寻找一种解决方案,将列表中每个对象的属性转换为一些数组,最终我找到了

然后我找到了这个密码

MyList.Select(x=>x.Name).ToArray();
这是解决我问题的办法。但我还是不明白变量“x”的意思。有谁能简单地向我解释一下这个语法是如何工作的吗?

这是一个简单的例子

lambda表达式是一个匿名函数,可用于 创建委托或表达式树类型。通过使用lambda 表达式,您可以编写可以作为 参数或作为函数调用的值返回。兰姆达 表达式对于编写LINQ查询特别有用 表达。要创建lambda表达式,请指定输入 lambda运算符=>左侧的参数(如果有),以及 将表达式或语句块放在另一侧。对于 例如,lambda表达式x=>x*x指定一个 命名为x并返回x平方的值

这是一个很好的例子

lambda表达式是一个匿名函数,可用于 创建委托或表达式树类型。通过使用lambda 表达式,您可以编写可以作为 参数或作为函数调用的值返回。兰姆达 表达式对于编写LINQ查询特别有用 表达。要创建lambda表达式,请指定输入 lambda运算符=>左侧的参数(如果有),以及 将表达式或语句块放在另一侧。对于 例如,lambda表达式x=>x*x指定一个 命名为x并返回x平方的值

LINQ
.Select(此IEnumerable源代码,Func选择器)
扩展方法需要一个Func,它接受一个参数并返回另一种(甚至相同)类型的对象/值

有几种方法可以指定要为可枚举项中的每个项执行的函数:

  • Lambda expressions:您在问题中发布的内容
    x=>x.Name
    x
    是输入参数,
    x.Name
    是结果。也可以写成lambda语句:
    x=>{return x.Name;}
    。Lambda表达式是编写可能只使用一次的短方法的一种非常简洁的方法。(此外,它们在闭包中收集周围的范围——但这与您的问题无关)
  • 匿名委托:大致与上面相同。将被写为
    delegate(YourType x){return x.Name;}
  • 方法组:在其他位置定义命名方法,并指定其名称:
    。选择(this.SelectName)
    <代码>选择名称将写为:

    private string SelectName(YourType x) {
      return x.Name;
    }
    
LINQ扩展方法通常适用于
IEnumerable
的实例,因此可以迭代/枚举任何类型(主要是集合)
.Select()
用于将类型为
IEnumerable
的一个可枚举项转换为类型为
IEnumerable
的另一个可枚举项。请注意,
选择器
函数作为参数传递给
.Select()
仅在枚举可枚举项后执行(通过
foreach
.ToList()
.ToArray()
或其他方式)

使用LINQ,您将更加关注以数据为中心的类型视图。您不在乎
.Select()
是否在内部使用foreach、for或任何其他方式访问您的收藏项目。它甚至可以并行化操作(
.aspallel

当然,大多数LINQ调用都可以用简单的代码重写,例如:

var nameList = List<String>(MyList.Count);
foreach(var item in MyList) {
  nameList.Add(item.Name);
}

var array = nameList.ToArray(); // this is still LINQ,
                                // but I didn't want to bother
                                // with re-allocating the array
                                // or with using indexing
var nameList=List(MyList.Count);
foreach(MyList中的var项){
名称列表。添加(项目名称);
}
var array=nameList.ToArray();//这仍然是林克,
//但我不想打扰你
//通过重新分配阵列
//或者使用索引
LINQ
.Select(此IEnumerable源,Func选择器)
扩展方法需要一个Func,它接受一个参数并返回另一种(甚至相同)类型的对象/值

有几种方法可以指定要为可枚举项中的每个项执行的函数:

  • Lambda expressions:您在问题中发布的内容
    x=>x.Name
    x
    是输入参数,
    x.Name
    是结果。也可以写成lambda语句:
    x=>{return x.Name;}
    。Lambda表达式是编写可能只使用一次的短方法的一种非常简洁的方法。(此外,它们在闭包中收集周围的范围——但这与您的问题无关)
  • 匿名委托:大致与上面相同。将被写为
    delegate(YourType x){return x.Name;}
  • 方法组:在其他位置定义命名方法,并指定其名称:
    。选择(this.SelectName)
    <代码>选择名称将写为:

    private string SelectName(YourType x) {
      return x.Name;
    }
    
LINQ扩展方法通常适用于
IEnumerable
的实例,因此可以迭代/枚举任何类型(主要是集合)
.Select()
用于将类型为
IEnumerable
的一个可枚举项转换为类型为
IEnumerable
的另一个可枚举项。请注意,
选择器
函数作为参数传递给
.Select()
仅在枚举可枚举项后执行(通过
foreach
.ToList()
.ToArray()
或其他方式)

使用LINQ,您将更加关注以数据为中心的类型视图。您不在乎
.Select()
是否在内部使用foreach、for或任何其他方式访问您的收藏项目。它甚至可以并行化操作(
.aspallel

当然,大多数LINQ调用都可以重写