ZetCode

C# 表达式

最后修改于 2025 年 4 月 22 日

本文探讨了在 C# 编程中使用表达式。

一个 表达式 是一个计算结果为单个值的代码单元。

表达式由操作数和运算符组成,其中运算符指定要对操作数执行的操作。

C# 支持多种类型的表达式,包括

Func square = (int x) => x * x;

此赋值的右侧包含一个函数体表达式,该表达式会生成一个计算值。

Console.WriteLine("falcon");

相反,像控制台输出这样的语句不会产生值。

C# lambda 表达式

lambda 表达式是一个没有固定标识符的匿名函数,它使用 => 运算符将参数与主体分开。

Program.cs
int[] vals = { 1, -2, 3, 4, 0, -3, 2, 1, 3 };

var res = Array.FindAll(vals, (e) => e > 0);
Console.WriteLine(string.Join(" ", res));

此示例使用 lambda 表达式 (e) => e > 0 作为 Array.FindAll 的谓词,从数组中筛选出正整数。

$ dotnet run
1 3 4 2 1 3

C# 查询表达式

查询表达式支持通过结构化查询在 C# 中提取和转换数据。

Program.cs
int[] vals = { -2, 4, 6, -1, 2, 0, 1, -3, -4, 2, 3, 8 };

var evens = 
    from val in vals
    where val % 2 == 0
    select val;

Console.WriteLine(string.Join(" ", evens));

此示例使用查询表达式来识别整数数组中的所有偶数。

$ dotnet run
-2 4 6 2 0 -4 2 8

C# switch 表达式

与传统的 switch 语句不同,switch 表达式通过将表达式与模式进行比较来简化分支,并返回匹配分支的值。

Program.cs
int age = 23;
string name = "Peter";

List colors = new List {"blue", "khaki", "orange"};
var nums = new int[] {1, 2, 3, 4, 5};

Console.WriteLine(check(age));
Console.WriteLine(check(name));
Console.WriteLine(check(colors));
Console.WriteLine(check(nums));

object check(object val) => val switch 
{
    int => "integer",
    string => "string",
    List => "list of strings",
    Array => "array",
    _ => "unknown"
};

此示例使用 switch 表达式来确定各种变量的数据类型。

$ dotnet run
integer
string
list of strings
array

C# with 表达式

with 表达式创建一个操作数的修改副本,更改指定的属性或字段。

Program.cs
Point p1 = new Point(0, 0);
Point p2 = p1 with { y = 3 };

Console.WriteLine(p1);
Console.WriteLine(p2);

record Point(int x, int y);

此示例生成一个点的副本,使用 with 表达式将其 y 坐标修改为 3。

$ dotnet run
Point { x = 0, y = 0 }
Point { x = 0, y = 3 }

C# 内插字符串表达式

内插字符串表达式以 $ 为前缀,允许将表达式嵌入到字符串中以进行动态格式化。

Program.cs
int x = 5;
int y = 6;

Console.WriteLine($"{x} * {y} = {x * y}");

此示例通过将乘法表达式嵌入到内插字符串中来构造格式化的字符串。

$ dotnet run
5 * 6 = 30

C# 表达式体定义

表达式体定义为定义函数、构造函数、属性、索引器或终结器提供了一种简洁的语法。

Program.cs
Func square = (int x) => x * x;

int r = square(5);
Console.WriteLine(r);

var u = new User("John Doe", "gardener");
Console.WriteLine(u);

class User
{
    public User(string name, string occupation) =>
        (Name, Occupation) = (name, occupation);

    public string Name { get; set; }
    public string Occupation { get; set; }

    public override string ToString() => $"{Name} is a {Occupation}";
}

此程序演示了 square 函数、User 构造函数和 ToString 方法的表达式体定义。

$ dotnet run
25
John Doe is a gardener

来源

表达式 - 语言参考

本文演示了如何在 C# 中使用各种表达式。

作者

我是 Jan Bodnar,一位在软件开发方面拥有丰富经验的专注程序员。自 2007 年以来,我撰写了 1,400 多篇编程文章和八本电子书。拥有超过十年的编程教学经验,我通过全面的教程分享我的专业知识。

列出所有 C# 教程