目录

C# 中 => 运算符的用法

在 C# 中, 读作 “goes to”(转到),主要用于将左侧的输入参数与右侧的执行代码块或表达式分开。

1. Lambda 表达式 (Lambda Expressions)

Lambda 表达式是一种匿名函数,常用于 LINQ 查询或作为委托(Delegate)的参数。

语法结构 (输入参数) ⇒ 表达式或语句块

1.1 表达式 Lambda (Expression Lambda)

右侧是一个表达式,返回表达式的结果。

// 定义一个委托,接收 int 返回 int
Func<int, int> square = x => x * x;
Console.WriteLine(square(5)); // 输出 25

1.2 语句 Lambda (Statement Lambda)

右侧是一个代码块(包含在大括号中),可以包含多条语句。

Action<string> greet = name =>
{
    string greeting = $"Hello, {name}!";
    Console.WriteLine(greeting);
};
greet("World"); // 输出 Hello, World!

1.3 多个参数

当有多个参数时,必须使用括号。

Func<int, int, int> 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 开始,可以用于 getset 访问器。

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”