第07部分 语句关键字
7.1 选择语句
7.1.1 if~else if~else
7.1.2 switchcatchbreak~default
- 表示根据与匹配表达式的模式,从候选列表中选择单个开关部分进行执行
- 针对3个或更多条件测试单个表达式,switch可以替换if~else可选项,
- 支持T泛型的类型:C#6.0之前支持字符串,字符型,bool,整数,枚举值,在C#7.0之后任何非null表达式。
- switch最多可包含一个default语句部分。
- 每组case一般不能丢失break,C#不允许case贯穿case,最多只有一个语句块被激活。
- 可以通过break,goto,return显式跳出开关来满足要求,确保不出现贯穿。throw将跳出整个程序。
- goto语句必须将控制权交给单个常量标签,防止产生不良副作用,如死循环。
- case标签指定一个模式和一个匹配表达式,在C#6.0之前case不允许常量值相同,前后顺序不重要,在7.0之后支持了其他类型,不需要定义互斥值,允许case类型不同,但可能结果相同,因此要对case进行合理的排序。
- case全部不执行就会进入default语句块。
- 在case语句中可以使用when块来指定必须满足附加条件的case语句,when可以是任何返回bool的布尔表达式。
7.2 迭代语句
7.2.1 do~while
- 先执行后判断的迭代语句,do~while会执行一次到多次,在do块中可以用break,goto,return,throw跳出循环。
- 用Continue可以中断当前循环并进入下一次循环判断。
7.2.2 while
- 进入判断后执行的迭代语句,while会执行0到多次。
7.2.3 for
- for带有一个迭代器,用bool来控制迭代的次数,true会执行一次迭代,在进入判断是否继续迭代
7.2.4 foreach~in
- 用来遍访一组集合的迭代器,集合是不可为null类型。当集合中没有元素时会自动跳出。
7.3 跳转语句
7.3.1 break
- 表示立即跳出最近循环和开关,并将控制权交还给已终止语句后面的语句。
7.3.2 continue
7.3.3 goto
- 将控制权直接传递给标记语句,可用于跳出深层嵌套,利用标签(格式:“Finish:”)
7.3.4 return
- 可终止当前它所在的方法的执行,并将控制权返回给调用方法。
- return在try语句块中时在返回前会执行一次finally语句
7.4 异常处理语句
7.4.1 throw
- 发出程序执行期间出现异常的信号。
- 常用于try~catch中的异常抛出。
7.4.2 try~catch
- 可包含一个try和多个catch块,指定不同异常的处理程序
- 异常时,CLR查找此异常的catch语句,当没有与之匹配的catch时,会调用当前方法的方法,以此类推遍历调用堆栈,未找到时,将发布显式一条未处理的异常消息,并停止执行程序。
- 可以使用派生自System.Exception的对象参数,当在多个catch语句中,应优先使用特定性更完整的异常语句。
- 可以使用异常筛选器
catch (ArgumentException e) when (e.ParamName == "…"