">
赞
踩
=>
令牌支持两种形式:作为 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 = { 4, 7, 10 };
- int product = numbers.Aggregate(1, (interim, next) => interim * next);
- Console.WriteLine(product); // output: 280
lambda 表达式的输入参数在编译时是强类型。 当编译器可以推断输入参数的类型时,如前面的示例所示,可以省略类型声明。 如果需要指定输入参数的类型,则必须对每个参数执行类型声明,如以下示例所示:
C#复制运行
- int[] numbers = { 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
是有效的表达式。 expression
的返回类型必须可隐式转换为成员的返回类型。 如果成员:
void
返回类型或set
访问器expression
必须是语句表达式。 由于表达式的结果被丢弃,该表达式的返回类型可以是任何类型。
以下示例演示了用于 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 成员”。
不能重载 =>
运算符。
有关 lambda 运算符的详细信息,请参阅 C# 语言规范中的匿名函数表达式部分。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。