![C# 8.0本质论](https://wfqqreader-1252317822.image.myqcloud.com/cover/306/43475306/b_43475306.jpg)
4.3 代码块
在前面的if语句示例中,if和else之后仅跟随了一个System.Console.WriteLine();语句,如代码清单4.23所示。
代码清单4.23 不需要代码块的if语句
![](https://epubservercos.yuewen.com/7885FF/22815793809130806/epubprivate/OEBPS/Images/d4.23.jpg?sign=1739360479-vuC4wRFQNwS00MmLz6FrU0UC41fEzNZA-0-6707c3e852942b04beb0b81b77c4b9b1)
可用大括号将多个语句合并成代码块,以实现在符合条件时执行多个语句。例如代码清单4.24中突出显示的用于计算半径的代码块。
代码清单4.24 跟随了代码块的if语句
![](https://epubservercos.yuewen.com/7885FF/22815793809130806/epubprivate/OEBPS/Images/d4.24.jpg?sign=1739360479-2itiJxR6HVELGIqoP8xgfkmAwI37qO1f-0-57317fa51a33e58e8f950f341d544f5c)
![](https://epubservercos.yuewen.com/7885FF/22815793809130806/epubprivate/OEBPS/Images/d4.24x.jpg?sign=1739360479-ZGQU3qNnIeCosiUEMSpPcQWcMowyHBMI-0-a516b8762bea772ba3e9a250b3aa0a51)
输出4.14展示了结果。
输出4.14
![](https://epubservercos.yuewen.com/7885FF/22815793809130806/epubprivate/OEBPS/Images/s4.14.jpg?sign=1739360479-EXmVXhafvMXopto16bT84aGZmMykeUIx-0-aa805a6c657ca9a5af903bddff4bac39)
在这个例子中,if语句检查radius(半径)是不是正数。如果是,就计算并显示圆的面积;否则显示消息指出半径无效。
注意第一个if之后跟随了两个语句,它们被封闭在一对大括号中。大括号将多个语句合并成代码块。
如去掉代码清单4.24中用于创建代码块的大括号,在布尔表达式返回true的前提下,只有紧接在if语句之后的那条语句才会执行。无论布尔表达式求值结果是什么,后续的语句都会执行。代码清单4.25展示了这种无效的代码。
代码清单4.25 依赖缩进造成无效的代码
![](https://epubservercos.yuewen.com/7885FF/22815793809130806/epubprivate/OEBPS/Images/d4.25.jpg?sign=1739360479-9DqCvxs1h3PEgyGFcpLsXLxVaPafwPv8-0-af50b4b66004e4c0ffbd6a94f6cf6e81)
在C#中,缩进仅用来增强代码的可读性。编译器会忽略它,所以上述代码在语义上等价于代码清单4.26。
代码清单4.26 使用大括号的if语句
![](https://epubservercos.yuewen.com/7885FF/22815793809130806/epubprivate/OEBPS/Images/d4.26.jpg?sign=1739360479-fYNYVzwnDrSqJzPb6WGi3DALafNRH0OO-0-0f608d13101c49329e02ad48d3e49fb3)
程序员必须防止此类不容易发现的错误。一种比较极端的做法是,无论如何都在控制流程语句之后包括代码块,即使其中只有一个语句。事实上,设计规范是除非是最简单的单行if语句,否则避免省略大括号。
虽然比较少见,但也可独立使用代码块,它在语义上不属于任何控制流程语句。换言之,大括号可自成一体(例如没有条件或循环),这完全合法。
上述两个代码清单的π值用System.Math类的PI常量表示。编程时不要硬编码π和e(自然对数的底),请用System.Math.PI或System.Math.E。
设计规范
·除非使用最简单的单行if语句,否则避免省略大括号