lambda 运算符=>将左侧的输入变量与右侧的 lambda 主体分开。

lambda 运算符

在 lambda 表达式中,lambda 运算符=>将左侧的输入变量与右侧的 lambda 主体分开。

以下示例使用带有方法语法的 LINQ 功能来演示 lambda 表达式的用法:

C#
string[] words = { "bot", "apple", "apricot" };
int minimalLength = words
  .Where(w => w.StartsWith("a"))
  .Min(w => w.Length);
Console.WriteLine(minimalLength);   // output: 5

int[] numbers = { 1, 4, 7, 10 };
int product = numbers.Aggregate(1, (interim, next) => interim * next);
Console.WriteLine(product);   // output: 280

lambda 表达式的输入变量在编译时是强类型。 当编译器可以推断输入变量的类型时,如前面的示例所示,可以省略类型声明。 如果需要指定输入变量的类型,则必须对每个变量执行此操作,如以下示例所示:

C#
int[] numbers = { 1, 4, 7, 10 };
int product = numbers.Aggregate(1, (int interim, int next) => interim * next);
Console.WriteLine(product);   // output: 280

以下示例显示如何在没有输入变量的情况下定义 lambda 表达式:

C#
Func<string> greet = () => "Hello, World!";
Console.WriteLine(greet());

有关详细信息,请参阅 Lambda 表达式

表达式主体定义

表达式主体定义具有下列常规语法:

C#
member => expression;

其中“expression”是有效的表达式。 请注意,仅当成员的返回类型是 void 时,或者成员是构造函数、终结器或属性 set 访问器时,表达式才可能是语句表达式。

以下示例演示了用于 Person.ToString 方法的表达式主体定义:

C#
public override string ToString() => $"{fname} {lname}".Trim();

它是以下方法定义的简写版:

C#
public override string ToString()
{
   return $"{fname} {lname}".Trim();
}

自 C#6 起支持方法和只读属性的表达式主体定义。 自 C# 7.0 起支持构造函数、终结器、属性访问器和索引器的表达式主体定义。

有关详细信息,请参阅 Expression-bodied members(Expression-bodied 成员)。

运算符可重载性

不能重载 => 运算符。

posted on 2019-02-25 16:51  MichaelZhau  阅读(473)  评论(0编辑  收藏  举报