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
是结果。也可以写成lambda语句:x.Name
。Lambda表达式是编写可能只使用一次的短方法的一种非常简洁的方法。(此外,它们在闭包中收集周围的范围——但这与您的问题无关)x=>{return x.Name;}
- 匿名委托:大致与上面相同。将被写为
delegate(YourType x){return x.Name;}
- 方法组:在其他位置定义命名方法,并指定其名称:
<代码>选择名称将写为:。选择(this.SelectName)
private string SelectName(YourType x) { return x.Name; }
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
是结果。也可以写成lambda语句:x.Name
。Lambda表达式是编写可能只使用一次的短方法的一种非常简洁的方法。(此外,它们在闭包中收集周围的范围——但这与您的问题无关)x=>{return x.Name;}
- 匿名委托:大致与上面相同。将被写为
delegate(YourType x){return x.Name;}
- 方法组:在其他位置定义命名方法,并指定其名称:
<代码>选择名称将写为:。选择(this.SelectName)
private string SelectName(YourType x) { return x.Name; }
IEnumerable
的实例,因此可以迭代/枚举任何类型(主要是集合).Select()
用于将类型为IEnumerable
的一个可枚举项转换为类型为IEnumerable
的另一个可枚举项。请注意,选择器
函数作为参数传递给.Select()
仅在枚举可枚举项后执行(通过foreach
、.ToList()
、.ToArray()
或其他方式)
使用LINQ,您将更加关注以数据为中心的类型视图。您不在乎.Select()
是否在内部使用foreach、for或任何其他方式访问您的收藏项目。它甚至可以并行化操作(.aspallel
)
当然,大多数LINQ调用都可以重写