更新: 2008 年 7 月
程序所执行的操作以“语句”表达。常见操作包括声明变量、赋值、调用方法、循环访问集合,以及根据给定条件分支到一个或另一个代码块。语句在程序中的执行顺序称为“控制流”或“执行流”。根据程序对运行时所收到的输入的响应,在程序每次运行时控制流可能有所不同。
语句可以是以分号结尾的单行代码,或者是语句块中的一系列单行语句。语句块括在括号 {} 中,并且可以包含嵌套块。下面的代码演示两个单行语句示例和一个多行语句块:
C# | 复制代码 |
---|---|
static void Main() { // Declaration statement. int counter; // Assignment statement. counter = 1; // Error! This is an expression, not an expression statement. // counter + 1; // Declaration statements with initializers are functionally // equivalent to a declaration statement followed by assignment statement: int[] radii = { 15, 32, 108, 74, 9 }; // Declare and initialize an array. const double pi = 3.14159; // Declare and initialize a constant. // foreach statement block that contains multiple statements. foreach (int radius in radii) { // Declaration statement with initializer. double circumference = pi * (2 * radius); // Expression statement (method invocation). A single-line // statement can span multiple text lines because line breaks // are treated as white space, which is ignored by the compiler. System.Console.WriteLine("Radius of circle #{0} is {1}. Circumference = {2:N2}", counter, radius, circumference); // Expression statement (postfix increment). counter++; } // End of foreach statement block } // End of Main method body. } // End of SimpleStatements class. /* Output: Radius of circle #1 = 15. Circumference = 94.25 Radius of circle #2 = 32. Circumference = 201.06 Radius of circle #3 = 108. Circumference = 678.58 Radius of circle #4 = 74. Circumference = 464.96 Radius of circle #5 = 9. Circumference = 56.55 */ |
语句的类型
下表列出 C# 中的各种语句类型及其关联的关键字,并提供指向包含更多信息的主题的链接:
类别 | C# 关键字/说明 | ||||
---|---|---|---|---|---|
声明语句 | 声明语句引入新的变量或常量。变量声明可以选择为变量赋值。在常量声明中必须赋值。
| ||||
表达式语句 | 用于计算值的表达式语句必须在变量中存储该值。
| ||||
| 选择语句用于根据一个或多个指定条件分支到不同的代码段。有关更多信息,请参见下列主题:
| ||||
| 迭代语句用于遍历集合(如数组),或重复执行同一组语句直到满足指定的条件。有关更多信息,请参见下列主题:
| ||||
| 跳转语句将控制转移给另一代码段。有关更多信息,请参见下列主题:
| ||||
| 异常处理语句用于从运行时发生的异常情况正常恢复。有关更多信息,请参见下列主题:
| ||||
|
检查和未检查语句用于指定当将结果存储在变量中、但该变量过小而不能容纳结果值时,是否允许数值运算导致溢出。有关更多信息,请参见 | ||||
fixed 语句 |
Fixed 语句禁止垃圾回收器重定位可移动的变量。有关更多信息,请参见 | ||||
lock 语句 |
lock 语句用于限制一次仅允许一个线程访问代码块。有关更多信息,请参见 | ||||
标记语句 |
可以为语句指定一个标记,然后使用 | ||||
空语句 | 空语句只含一个分号。空语句不执行任何操作,可以在需要语句但不需要执行任何操作的地方使用。下面的示例演示空语句的两种用法:
|
嵌入语句
一些语句(例如
C# | 复制代码 |
---|---|
// Recommended style. Embedded statement in a block. foreach (string s in System.IO.Directory.GetDirectories( System.Environment.CurrentDirectory)) { System.Console.WriteLine(s); } // Not recommended. foreach (string s in System.IO.Directory.GetDirectories( System.Environment.CurrentDirectory)) System.Console.WriteLine(s); |
未括在括号 {} 内的嵌入语句不能作为声明语句或标记语句。下面的示例演示了这种情况:
C# | 复制代码 |
---|---|
if(b == true) //Error CS1023: int radius = 5; |
将该嵌入语句放在语句块中以修复错误:
C# | 复制代码 |
---|---|
if(b == true) { // OK: System.DateTime d = System.DateTime.Now; System.Console.WriteLine(d.ToLongDateString()); } |
嵌套语句块
语句块可以嵌套,如以下代码所示:
C# | 复制代码 |
---|---|
foreach (string s in System.IO.Directory.GetDirectories( System.Environment.CurrentDirectory)) { if (s.StartsWith("CSharp")) { if (s.EndsWith("TempFolder")) { return s; } } } return "Not found."; |
无法访问的语句
如果编译器认为在任何情况下控制流都无法到达特定语句,将生成警告 CS0162,如下面的示例所示:
C# | 复制代码 |
---|---|
// An over-simplified example of unreachable code. const int val = 5; if (val < 4) { System.Console.WriteLine("I'll never write anything."); //CS0162 } |
相关章节
C# 语言规范
有关更多信息,请参见 C# 语言规范中的以下各章节:
1.5 语句
8 语句
请参见
概念
修订记录
日期 | 修订记录 | 原因 |
---|---|---|
2008 年 7 月 | 增加了新的代码示例和表,并修订了文字。 |
信息补充。 |