C#中的switch语句是一种多分支选择语句,它可以根据不同的情况执行不同的代码块。它与if-else语句相似,但是switch语句更加简洁,而且在处理大量分支时更加有效。
switch语句的基本格式如下:
switch(expression) { case value1: // code to be executed if expression = value1; break; case value2: // code to be executed if expression = value2; break; ... default: // code to be executed if expression doesn't match any of the values; }
其中expression是一个表达式,它的值将与case子句中的值进行比较。如果表达式的值与case子句中的值匹配,则将执行相应的代码块。如果表达式的值不匹配任何case子句中的值,则将执行default子句中的代码。
switch语句还具有一些其他特性:
一个 switch 语句允许测试一个变量等于多个值时的情况。每个值称为一个 case,且被测试的变量会对每个 switch case 进行检查。
C# 中 switch 语句的语法:
switch(expression){
case constant-expression :
statement(s);
break;
case constant-expression :
statement(s);
break;
default :
statement(s);
break;
}
switch 语句必须遵循下面的规则:
- Switch有点类似于多分支的if语句。不过通常情况下if语句的条件判断是一个区间,而Switch是一个固定的值,所以要求变量一定要是一个固定的值(浮点型不是固定的!),只有整型和枚举类型可以符合要求!
- Switch会判断数据类型,字符型和整型是完全不一样的,不一样的数据类型是无法通过的(字符1转换为整型并不等于1,)。
- 在其他语言中Switch会出现贯穿现象,但在C#中不会出现这种现象(会报错)以下是C语言的Switch贯穿现象:
#include <stdio.h> int main (){ char grade = "A"; switch(grade){ case "A" : printf("很棒!n" );//没有使用break结束,会继续执行下面的case case "B" : printf("做得好n" );//而且不管下面的case是否通过,都会执行,直到遇到break或者执行完整个Switch语句 case "C" : printf("您通过了n" );//所以在其他语言中break必须添加 default : printf("无效的成绩n" ); } printf("您的成绩是 %cn", grade ); return 0; }
这是C#
using System; namespace DecisionMaking{ class Program{ static void Main(string[] args){ char grade = "A"; switch (grade){ case "A": Console.WriteLine("很棒!"); case "B": Console.WriteLine("做得好"); case "C": Console.WriteLine("您通过了"); default: Console.WriteLine("无效的成绩"); } Console.WriteLine("您的成绩是 {0}", grade); Console.ReadLine(); } } }
运行会直接报错,没有使用break结尾连编译都通过不了!
虽然Switch贯穿可能会带来一些bug,但并不是完全没有用,有些情况可以使用Switch贯穿来带来一些效率上的提升,虽然C#没有办法使用类C的方式进行Switch贯穿,但可以使用goto语句来实现相同效果!
using System;
namespace DecisionMaking{
class Program{
static void Main(string[] args){
char grade = "B";
switch (grade){
case "A":
Console.WriteLine("很棒!");
break;
case "B":
case "C":
Console.WriteLine("做得好");
break;
case "D":
Console.WriteLine("您通过了");
break;
case "F":
Console.WriteLine("最好再试一下");
break;
default:
Console.WriteLine("无效的成绩");
break;
}
Console.WriteLine("您的成绩是 {0}", grade);
Console.ReadLine();
}
}
}
当上面的代码被编译和执行时,它会产生下列结果:
做得好 您的成绩是 B
C# 判断
在我们使用c#做WinFrom开发时,经常会用到进度条(ProgressBar)。那么如何才能实现winfrom进度条及进度信息提示呢?方法一:多...
我们已经提到过,委托是用于引用与其具有相同标签的方法。换句话说,您可以使用委托对象调用可由委托引用的方法。匿名方法(Anon...
泛型(Generic) 允许您延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候。换句话说,泛型允许您编...
集合(Collection)类是专门用于数据存储和检索的类。这些类提供了对栈(stack)、队列(queue)、列表(list)和哈希表(hash t...
C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在...