在c#中将对象列表转换为数组-“x => x.Name”语法是啥意思? [复制]
Posted
技术标签:
【中文标题】在c#中将对象列表转换为数组-“x => x.Name”语法是啥意思? [复制]【英文标题】:converting list of object to array in c# - what does the "x => x.Name" syntax mean? [duplicate]在c#中将对象列表转换为数组-“x => x.Name”语法是什么意思? [复制] 【发布时间】:2015-08-25 04:31:47 【问题描述】:当我最终找到this时,我一直在寻找将列表中每个对象的属性转换为一些数组的解决方案
然后我找到了这段代码
MyList.Select(x=>x.Name).ToArray();
这是我的问题的解决方案。但我仍然不明白变量“x”是什么意思。谁能简要地向我解释一下这种语法是如何工作的?
【问题讨论】:
x 表示 MyList 中的元素... 运算符左边的x为输入变量,对应查询表达式中的x。 这是一个 lambda 表达式。请参考msdn.microsoft.com/en-us/library/bb397687.aspx 【参考方案1】:LINQ .Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector)
扩展方法需要一个 Func,它接受一个参数并返回另一个(甚至相同)类型的对象/值。
您有几种方法可以指定为枚举中的每个项目执行哪个函数:
Lambda 表达式:您在问题中发布的内容。x => x.Name
:x
是输入参数,x.Name
是结果。也可以写成 lambda 语句:x => return x.Name;
。 Lambda 表达式是编写可能只使用一次的简短方法的一种非常简洁的方法。 (此外,他们在闭包中收集周围的范围——但这与您的问题无关)
匿名代表:大体与上述相同。将写为delegate(YourType x) return x.Name;
方法组:在别处定义一个命名方法,并指定其名称:.Select(this.SelectName)
。 SelectName
会写成:
private string SelectName(YourType x)
return x.Name;
LINQ 扩展方法通常适用于 IEnumerable<T>
的实例,因此可以迭代/枚举的任何类型(主要是集合)。 .Select()
用于将一个IEnumerable<TSource>
类型的枚举转换为另一个IEnumerable<TResult>
类型的枚举。请注意,作为参数传递给.Select()
的selector
函数仅在枚举可枚举(通过foreach
、.ToList()
、.ToArray()
或其他方式)后才会执行。
使用 LINQ,您可以更专注于类型的以数据为中心的视图。您不在乎.Select()
是否在内部使用 foreach、for 或任何其他方式来获取您收藏的项目。它甚至可以并行化操作 (.AsParallel
)。
当然,大多数 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
【讨论】:
最后一个代码 sn-p 中的错字。在函数体中,您的意思是说 x.Name。我投了赞成票,因为您提供了将参数传递给选择的所有可能方式。 @Khnle-Kevin:谢谢,我已经更新了我的问题。希望所有参数具有相同的名称并且错过了更新方法体。【参考方案2】:这是lambda expression in c#。
lambda 表达式是一个匿名函数,您可以使用它 创建委托或表达式树类型。通过使用 lambda 表达式,您可以编写可以传递为的局部函数 参数或作为函数调用的值返回。拉姆达 表达式对于编写 LINQ 查询特别有帮助 表达式。要创建 lambda 表达式,请指定输入 lambda 运算符 => 左侧的参数(如果有),以及 你把表达式或语句块放在另一边。为了 例如,lambda 表达式 x => x * x 指定的参数是 命名为 x 并返回 x 的平方值。
【讨论】:
以上是关于在c#中将对象列表转换为数组-“x => x.Name”语法是啥意思? [复制]的主要内容,如果未能解决你的问题,请参考以下文章