Lambda表达式语法

Tho*_*mas 7 c# linq lambda

是否必须在使用LINQ时使用lambda表达式,或lambda表达式是否可选?

在lambda表达式中,=>始终使用符号.这是什么意思?

 customers.Where(c => c.City == "London"); 
Run Code Online (Sandbox Code Playgroud)

c =>是使用但为什么?使用什么样的意思c =>.请详细讨论因为我不懂lambda.

Jon*_*eet 11

不,你不具备使用lambda表达式.例如,您的Where示例可以写为:

private static bool IsLondon(Customer customer)
{
    return customer.City == "London";
}

...

var londoners = customers.Where(IsLondon);
Run Code Online (Sandbox Code Playgroud)

当然,这是假设LINQ to Objects.对于LINQ to SQL等,您需要构建表达式树.

至于为什么"=>"总是在lambda表达式中使用,那只是因为这就是运算符的编写方式 - 就像问为什么"+"用于加法一样.

的"C => ..."被有效地赋予λ表达式一个lambda表达式参数称为c...在这种情况下一般类型推理提供类型c.正文提供要执行的操作或某些计算以返回基于的值c.

lambda表达式的完整描述超出了本答案的范围.然而,作为我书的明显插件,它们在深度C#的第9章中有详细介绍.


Jer*_*odd 7

lambda表达式

c => c.City == "London"
Run Code Online (Sandbox Code Playgroud)

是类似的简写

bool IsCustomerInLondon(Customer c)
{
  return (c.City == "London");
}
Run Code Online (Sandbox Code Playgroud)

这只是编写一个返回值的简单函数的一种非常简洁的方法.它被称为"匿名函数",因为它从未被赋予名称或正式定义(参数类型和返回类型是从上下文中推断出来的).

(实际上,它不仅仅是简写; lambda表达式与其他一些称为闭包的构造有关,这些构造非常酷且功能强大.)