=> 运算符(C# 参考)

=> 令牌支持两种形式:作为 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 = { 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 成员”。

运算符可重载性

不能重载 => 运算符。

C# 语言规范

有关 lambda 运算符的详细信息,请参阅 C# 语言规范中的匿名函数表达式部分。

请参阅

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值