你怎么读lambda表达式?

Cha*_*rns 5 .net c# lambda

我一直在想弄清楚为什么lambda表达式对我来说并不直观.我怀疑它的一部分可能是因为当我浏览代码时,为了我自己的清晰度,我有时会在内部将其翻译成我的母语.例如:

endDate.Value = someNullableDate ?? (object)DBNull.Value;
// I could read as:
set endDate to someNullableDate or, if null, to (object)dbNull
Run Code Online (Sandbox Code Playgroud)

另一种语言的例子:

for(int count = 0; count >= 42; count++) {
    cout << "Count is " << count << endl;
}
// May read as:
from an integer "count" as zero to 42 inclusive, display "Count is " and then the integer.
Run Code Online (Sandbox Code Playgroud)

那么如何读取lambda表达式:

var myList = new List<String>(/* various string values */);
var foo = myList.Select(s => s.Trim()).ToList(); //?
Run Code Online (Sandbox Code Playgroud)

Jam*_*xon 10

我会读到这个:

从myList单独选择每个项目到变量s,使用s,对其应用Trim(),一旦完成myList中的所有项目,将整个项目转换为列表.

  • 确实.或者,相反,它是另一种方式.C#[`iterator blocks`(想想:`yield`)](http://msdn.microsoft.com/en-us/library/9k7k7cf0.aspx)会产生技术上称为共同过程的东西:真的(部分)每次迭代ToList()的枚举器循环时,Select get执行一次.无论迭代器块有多复杂,它都可以实现,实际上即使它不是有限的.使用调试器逐步执行一个手写的for-each循环以获得一个懒惰的可枚举,您将看到它实际上是如何工作的! (2认同)

Dig*_*ift 4

鉴于 LINQ 通常仅适用于 IEnumerable 对象,您可以将其读s =>作“for every s in the IEnumerable”。

更新: 五年后重新审视这个答案,我对此深感不满意。就我个人而言,现在我发现自己将其视为“映射到”或者我看到了“这样”,这也是相关的,具体取决于具体情况。