我是C#和.NET世界的新手。我想了解以下声明。
var xyz = Enumerable.Repeat(obj, 1).ToList();
var abc =
xyz.Select(xyzobj => new res {
foo = bar,
xyzs = new [] {xyzobj},
}).ToList();
我理解Select接受一个对象和一个变换器函数并返回一个新形式的对象。但是在这里,它接受带有枚举值的lambda表达式和另一个对象。
我很困惑。以上陈述是否类似于var abc = xyz.Select(xyzobj => {
//some work with xyzobj
//and return object.
}).ToList();
有人可以解释上面的陈述实际上是这样做的,我的脑袋只是在我的新工作地点四处旋转这些陈述。
有人可以指导我使用良好的资源来理解lambda表达式和Enumeration。
答案 0 :(得分:4)
C#中有两种主要的lambda表达式。
表达式lambdas是这样的:
x => foo(x);
这需要一个参数x
,并对其执行一些转换foo
,返回foo(x)
的结果(虽然从技术上讲它可能不会返回结果类型{的值{1}}是foo(x)
)。
声明lambdas看起来像这样:
void
这需要一个参数x => {
// code block
}
并对其执行一些操作(如果提供了显式的x
,则可选择返回一个值)。代码块可以由多个语句组成,这意味着您可以声明变量,执行循环等。更简单的表达式lambda语法不支持这种情况。但它只是另一种类型的lambda。
如果有帮助你可以认为以下内容是等效的(尽管如果你试图将其解析为Expression
,它们并不完全等效):
return
进一步阅读
答案 1 :(得分:0)
// Creates a IEnumerable<T> of the type of obj with 1 element and converts it to a List
var xyz = Enumerable.Repeat(obj, 1).ToList();
// Select takes each element in the List xyz
// and passes it to the lambda as the parameter xyzobj.
// Each element is used to create a new res object with object initialization.
// The res object has two properties, foo and xyzs. foo is given the value bar
// (which was defined elsewhere).
// The xyzs property is created using the element from xyz passed into the lambda
var abc = xyz.Select(
xyzobj => new res {
foo = bar,
xyzs = new [] {xyzobj},
}).ToList();