在 C# 中,⇒ 读作 “goes to”(转到),主要用于将左侧的输入参数与右侧的执行代码块或表达式分开。
Lambda 表达式是一种匿名函数,常用于 LINQ 查询或作为委托(Delegate)的参数。
| 语法结构 | (输入参数) ⇒ 表达式或语句块 |
|---|
右侧是一个表达式,返回表达式的结果。
// 定义一个委托,接收 int 返回 int Func<int, int> square = x => x * x; Console.WriteLine(square(5)); // 输出 25
右侧是一个代码块(包含在大括号中),可以包含多条语句。
Action<string> greet = name => { string greeting = $"Hello, {name}!"; Console.WriteLine(greeting); }; greet("World"); // 输出 Hello, World!
当有多个参数时,必须使用括号。
Func<int, int, int> add = (x, y) => x + y; int result = add(3, 4); // 结果为 7
从 C# 6.0 开始,可以使用 ⇒ 来简化类成员(方法、属性、构造函数等)的定义,使代码更简洁。
如果方法只有一条语句,可以省略大括号和 return 关键字。
public class Person { public string FirstName { get; set; } public string LastName { get; set; } // 传统写法 // public override string ToString() // { // return $"{FirstName} {LastName}"; // } // 使用 => 简化 public override string ToString() => $"{FirstName} {LastName}"; }
用于简化只有 get 访问器的属性。
public class Circle { public double Radius { get; set; } // 自动计算属性 public double Area => Math.PI * Radius * Radius; }
从 C# 7.0 开始,可以用于 get 和 set 访问器。
private string _name; public string Name { get => _name; set => _name = value; // 简单的赋值 }
如果构造函数逻辑很简单,也可以使用。
public class User { public string Name { get; } // 构造函数 public User(string name) => Name = name; }
从 C# 8.0 开始,⇒ 用于 switch 表达式的分支匹配,这比传统的 case : break; 写法更紧凑。
public string GetColorName(int colorId) { return colorId switch { 1 => "Red", 2 => "Green", 3 => "Blue", _ => "Unknown" // _ 代表 default }; }
| 用法场景 | 示例 | 说明 |
| Lambda 表达式 | x ⇒ x + 1 | 用于 LINQ 或委托,表示输入 x,返回 x+1 |
| 表达式主体成员 | public int Age ⇒ 18; | 简化只有一行代码的方法或属性 |
| Switch 表达式 | 1 ⇒ “One” | 用于模式匹配,表示如果匹配 1,则结果为 “One” |