文章目录
- 10.1 什么是语句(*)
- 10.2 表达式语句
- 10.3 控制流语句
- 10.4 if 语句(*)
- 10.5 if ... else 语句(*)
- 10.6 while 循环(*)
- 10.7 do 循环(*)
- 10.8 for 循环
- 10.8.1 for 语句中变量的作用域
- 10.2 初始化和迭代表达式中的多表达式(*)
- 10.9 switch 语句
- 10.9.1 分支示例(*)
- 10.9.2 其他类型的模式表达式(*)
- 10.9.3 switch 语句的补充
- 10.10 跳转语句(*)
- 10.11 break 语句(*)
- 10.12 continue 语句(*)
- 10.13 标签语句
- 10.13.1 标签
- 10.13.2 标签语句的作用域
- 10.14 goto 语句
- 10.15 using 语句
- 10.15.1 包装资源的使用
- 10.15.2 using 语句的示例(*)
- 10.15.3 多个资源和嵌套
- 10.15.4 using 语句的另一种形式
- 10.16 其他语句
10.1 什么是语句(*)
10.2 表达式语句
表达式返回值有副作用,对许多表达式求值只是为了它们的副作用。
x = 10;
- 该表达式将 10 赋给 x,虽然这可能是语句的主要动机,但却归类为副作用。
- 设置 x 值后,表达式返回 x 的新值 10,但这个结果被忽略了。
10.3 控制流语句
- 条件执行语句
- if
- if … else
- switch
- 循环语句
- while
- do
- for
- foreach
- 跳转语句
- break
- continue
- return
- goto
- throw
10.4 if 语句(*)
10.5 if … else 语句(*)
10.6 while 循环(*)
10.7 do 循环(*)
10.8 for 循环
如果 TestExpr 为空,则测试一直返回 true。
10.8.1 for 语句中变量的作用域
任何声明在 initializer 中的变量只在该 for 语句的内部可见。
10.2 初始化和迭代表达式中的多表达式(*)
10.9 switch 语句
- C# 7.0 允许 TestExpr 为任何类型。
- switch 语句使用深度比较。
- 如果 TestExpr 和 PatternExpression 均为整数类型,C# 使用
==
比较。 - 否则,使用静态方法
Object.Equals(TestExpr, PatternExpression)
比较。
- 如果 TestExpr 和 PatternExpression 均为整数类型,C# 使用
- 每个分支块遵守“不穿过规则”。
- 分支块中的语句不能达到终点并进入下一个分支块。
- goto 不能和 switch 一起使用。
- default 分支可选,如果包括则必须以一条跳转语句结束。
10.9.1 分支示例(*)
10.9.2 其他类型的模式表达式(*)
10.9.3 switch 语句的补充
可以将多个分支标签附加到任意分支:
10.10 跳转语句(*)
10.11 break 语句(*)
10.12 continue 语句(*)
10.13 标签语句
标签语句仅执行 Statement 部分,就如同标签不存在一样。
10.13.1 标签
- 标签有自己的声明空间,可与变量重名。
- 标签名不能是关键字。
- 重叠范围内标签名不能重复。
10.13.2 标签语句的作用域
标签语句的作用域为:
- 其声明所在的块。
- 声明块内部嵌套的块。
图 10.7 阴影部分展示了 increment 标签语句的作用域。
10.14 goto 语句
- goto 可以跳入其所在块内的任何标签语句。
- goto 可以跳出到任何嵌套它的块内。
- goto 不能跳入所在块的内部快(避免部分条件判断缺失造成程序紊乱)。
使用 goto 语句是非常不好的!
10.15 using 语句
资源:指实现了 System.IDisposable 接口的类或结构。该接口仅有一个 Dispose 的方法。
图 10.8 展示了使用资源的阶段。如果使用资源时发生运行时错误,那么处置资源的代码可能无法执行。
- 分配资源。
- 使用资源。
- 处置资源。
10.15.1 包装资源的使用
using 语句的第一种形式如图 10.9 所示。
- 圆括号内分配资源。
- Statement 使用资源。
- using 语句隐式产生处置资源的代码。
使用 using 语句的效果如下:
- 分配资源。
- 将 Statement 放入 try 块。
- 创建资源的 Dispose 方法,并放入 finally 块。
10.15.2 using 语句的示例(*)
10.15.3 多个资源和嵌套
使用相同类型的多个资源语法如下:
10.15.4 using 语句的另一种形式
- 这种形式也能确保使用完资源后调用 Dispose 方法。
- 后续代码可能仍使用该资源,这将导致状态错误,因此不推荐使用该形式。