====== C# 中 => 运算符的用法 ======
在 C# 中,''=>'' 读作 "goes to"(转到),主要用于将左侧的输入参数与右侧的执行代码块或表达式分开。
===== 1. Lambda 表达式 (Lambda Expressions) =====
Lambda 表达式是一种匿名函数,常用于 LINQ 查询或作为委托(Delegate)的参数。
^ 语法结构 | ''(输入参数) => 表达式或语句块'' |
==== 1.1 表达式 Lambda (Expression Lambda) ====
右侧是一个表达式,返回表达式的结果。
// 定义一个委托,接收 int 返回 int
Func square = x => x * x;
Console.WriteLine(square(5)); // 输出 25
==== 1.2 语句 Lambda (Statement Lambda) ====
右侧是一个代码块(包含在大括号中),可以包含多条语句。
Action greet = name =>
{
string greeting = $"Hello, {name}!";
Console.WriteLine(greeting);
};
greet("World"); // 输出 Hello, World!
==== 1.3 多个参数 ====
当有多个参数时,必须使用括号。
Func add = (x, y) => x + y;
int result = add(3, 4); // 结果为 7
===== 2. 表达式主体定义 (Expression-bodied definitions) =====
从 C# 6.0 开始,可以使用 ''=>'' 来简化类成员(方法、属性、构造函数等)的定义,使代码更简洁。
==== 2.1 方法 (Methods) ====
如果方法只有一条语句,可以省略大括号和 ''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}";
}
==== 2.2 只读属性 (Read-only Properties) ====
用于简化只有 ''get'' 访问器的属性。
public class Circle
{
public double Radius { get; set; }
// 自动计算属性
public double Area => Math.PI * Radius * Radius;
}
==== 2.3 属性访问器 (Property Accessors) ====
从 C# 7.0 开始,可以用于 ''get'' 和 ''set'' 访问器。
private string _name;
public string Name
{
get => _name;
set => _name = value; // 简单的赋值
}
==== 2.4 构造函数与析构函数 (Constructors & Finalizers) ====
如果构造函数逻辑很简单,也可以使用。
public class User
{
public string Name { get; }
// 构造函数
public User(string name) => Name = name;
}
===== 3. switch 表达式 (Switch Expressions) =====
从 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" |