C# 语句

Tip

本文是已了解至少一种编程语言并正在学习 C# 的开发人员的 “基础知识 ”部分的一部分。 如果你不熟悉编程,请先 学习入门 教程。 有关完整语句语法,请参阅 C# 语言规范中的 语句

来自另一种语言? 声明、条件、循环和返回语句,你可能都很熟悉。 本文介绍的 C# 将自己的语法和分类用于这些功能。

语句是一个完整的命令:“执行此操作。一起,程序中的语句构成了程序从头到尾遵循的食谱。 大多数语句按顺序运行。 分支选择要运行的步骤,并循环重复步骤。

此示例声明数量,显示它,然后使用 if 语句决定是否重新库存:

int quantity = 5;
Console.WriteLine($"Quantity: {quantity}"); // => Quantity: 5

if (quantity < 10)
{
    quantity = 10;
    Console.WriteLine("Restocked"); // => Restocked
}

Console.WriteLine($"Quantity: {quantity}"); // => Quantity: 10

在查看各个组成部分之前,请先将示例作为完整命令来阅读。 声明、第一次对 if 的调用、整个 Console.WriteLine 结构,以及最后一次对 Console.WriteLine 的调用都是语句。 语句中的 if 块包含另外两个语句。

语句通常包含表达式

语句通常包含 表达式,这些表达式是生成值的代码片段。 在前面的示例中,整个 if 构造是一个语句。 其条件 quantity < 10 是一个生成 truefalse 的表达式。

声明语句引入了局部变量或常量。 初始化器表达式可以提供第一个值:

int quantity = 5;

完整行是声明语句。 初始值设定项 5 是该语句中的表达式。

赋值表达式将值存储在变量、属性、索引器或其他存储位置。 C# 允许赋值表达式形成 表达式语句

quantity = 10;

此语句执行操作,而不仅仅是计算值。 方法调用和递增操作是其他常见表达式语句:

Console.WriteLine("Restocking");
quantity++;

只有以下几种表达式形式可以作为表达式语句:

  • 赋值表达式
  • 方法调用表达式
  • 对象创建表达式
  • 前缀或后缀递增和递减表达式
  • await 表达式

并非每个表达式都可以单独作为语句。 例如, quantity + 1; 计算一个值,但不使用它。 这不是有效的语句。

下面是一个有用的工作定义:语句大致类似于英语的完整句子,而 表达式 类似于短语。 这种区别有助于你了解在文档和规范中遇到的正式术语和说明,尽管普通编码很少要求你有意识地记住这种区别。

按块对语句分组

对大括号({})之间的零个或多个语句进行分组。 C# 将组视为一个语句。 在开头的示例中,if 语句既可以执行赋值,也可以调用 Console.WriteLine,因为代码块会将它们归为同一个语句体。 块可以嵌套在其他块内。

选择和迭代语句将其正文称为 嵌入语句。 该正文可以是一个没有大括号的语句,也可以是分组多个语句的块。

即使语句体中只有一条语句,也应优先使用代码块。 大括号可明确哪些语句属于代码块,并防止后续编辑时意外将语句放到代码块之外。

块定义变量范围

在块中声明的变量,其作用域从声明处开始,一直到该块结束为止。 嵌套块可以使用封闭块声明的变量,但封闭块不能使用仅在嵌套块中声明的变量:

int outerValue = 10;

if (outerValue > 0)
{
    int innerValue = outerValue * 2;
    Console.WriteLine(innerValue); // => 20
}

// innerValue isn't in scope here.

为任务选择语句

将语句识别为命令后,可以按用途选择不同类型的语句:

  • 声明数据:声明语句引入局部变量和常量。
  • 执行操作: 表达式语句分配值、调用方法、创建对象、递增或递减值或等待异步操作。
  • 选择步骤:选择语句,例如 ifswitch,决定运行哪些代码。
  • 重复步骤:迭代语句,例如 foreachwhilefor重复语句或块。
  • 控制转移:跳转语句,例如 breakcontinuereturnyield,会将执行转移到另一处。
  • 处理异常:异常处理语句,例如 trycatch以及 throw响应或报告错误。
  • 管理资源:using 语句 可确保释放资源。
  • 使用专用行为:checkeduncheckedfixedlock语句支持特定方案。

C# 语言规范

有关详细信息,请参阅 C# 语言规范“语句”部分。

另见