我是 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 表达式和枚举的良好资源。
最佳答案
C# 中有两种主要类型的 lambda 表达式。
像这样的 lambda 表达式:
x => foo(x);
这需要一个参数 x
,并对它执行一些转换,foo
,返回 foo(x)
的结果(尽管在技术上它可能不会返回 foo(x)
的结果类型的值是 void
)。
声明 lambda 看起来像这样:
x => {
// code block
}
这需要一个参数 x
并对其执行一些操作(如果提供了显式 return
,则可选择返回一个值)。代码块可能由多个语句组成,这意味着您可以声明变量、执行循环等。这在更简单的表达式 lambda 语法中不受支持。但它只是另一种类型的 lambda。
如果有帮助,您可以将以下内容视为等价的(尽管如果您尝试将其解析为 Expression
,它们并不完全等价):
x => foo(x);
x => { return foo(x); }
延伸阅读
关于c# - 与 C# 中的 Enumerable.Select 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20963385/