c# - 与 C# 中的 Enumerable.Select 混淆

标签 c# lambda

我是 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/

相关文章:

c# - 格式化 TimeSpan 大于 24 小时

c# - 如何更改 3D 对象的不透明度值

Python:为什么 lambda 在内联 if 中定义变量?

c# - 仅显示一个选择的100个结果

c# - 使用命名空间外部的 T4 模板位置

c# - 如何从 C# System.Windows.Form.HtmlElement 中提取 *immediate* 文本(即不是子文本)

python - 有没有一种Python式的方法将基于范围的分段函数分组为单个函数?

java - 自定义函数: apply in Stream

c++17 如何编写 is_pointer_pointer 泛型 lambda?

c# - 编译器如何从 LAMBDA 表达式推断委托(delegate)类型?