C# Switch 语句

当您要针对三个或更多条件测试变量时,可以使用 switch 语句代替 if else 语句。在这里,您将了解switch语句以及如何在C#程序中有效地使用它。

以下是switch语句的一般语法。

 语法:

switch(match expression/variable)
{
    case constant-value:
        //要执行的语句;
        break;
    default: 
        //要执行的语句;
        break;
}

switch语句以switch关键字开头,该关键字包含一个匹配表达式或括号switch(匹配表达式 match expression)中的变量。这个匹配表达式或变量的结果将根据在花括号{}内指定的case条件进行测试。case必须用唯一的常量值指定,并以冒号:结束。每种情况包括一个或多个要执行的语句。如果常量值和匹配表达式/变量的值相等,则执行case。switch语句还可以包含一个可选的默认标签。如果没有执行case,则执行 default 标签。break、return或goto关键字用于从 switch 情况中退出程序控制。

以下示例演示了一个简单的switch语句。

int x = 10;

switch (x)
{ 
    case 5:
        Console.WriteLine("x的值是5");
        break;
    case 10:
        Console.WriteLine("x的值是10");
        break;
    case 15:
        Console.WriteLine("x的值是15");
        break;
    default:
        Console.WriteLine("未知值");
        break;
}
输出:
x的值是10

上面,switch (x)语句包含一个变量 x,其值将与每个 case 值的值匹配。上面的 switch 语句包含常量值5、10和15的三种情况。它还包含 default 标签,如果没有任何 case 值与 switch 变量/表达式 匹配,将执行该标签。每个case在 : 之后开始,并包含一个要执行的语句。X 的值与第二种情况下的值10: 匹配,因此输出值为 x 的值是10。

switch语句可以包含任何返回值类型为char,string,bool,int或enum的非空表达式。

switch语句还可以包含一个表达式,它的结果将在运行时针对每个 case 进行测试。

int x = 125;

switch (x % 2)
{ 
    case 0:
        Console.WriteLine($"{x} 为偶数");
        break;
    case 1:
        Console.WriteLine($"{x} 是奇数");
        break;
}
输出:
125是奇数

Switch Case

Switch Case 必须是唯一的常数值。它可以是bool,char,string,integer,enum或相应的可为null的类型。

注意

在c# 7.0之后,switch case可以包含非唯一值。在这种情况下,将执行第一个匹配的case。

考虑以下简单的switch语句示例。

string statementType = "switch";

switch (statementType)
{
    case "if.else":
        Console.WriteLine("if...else statement");
        break;
    case "ternary":
        Console.WriteLine("Ternary operator");
        break;
    case "switch":
        Console.WriteLine("switch statement");
        break;
}
输出:
switch statement

可以组合多个 case 来执行相同的语句。

int x = 5;

switch (x)
{ 
    case 1:
        Console.WriteLine("x = 1");
        break;
    case 2:
        Console.WriteLine("x = 2");
        break;
    case 4:
    case 5:
        Console.WriteLine("x = 4 or x = 5");
        break;
    default:
        Console.WriteLine("x > 5");
        break;
}

每个case必须通过使用break、return、goto语句或其他方式显式地退出case,确保程序控制退出一个case,并且不会进入默认的case。

以下使用 return 关键字。

static void Main(string[] args)
{
    int x = 125;
    Console.Write( isOdd(x)? "偶数值" : "奇数值");
}

static bool isOdd(int i, int j)
{
    switch (x % 2)
    { 
        case 0:
            return true;
        case 1:
            return false;
        default:
            return false;
    }
    
    return false;
}
输出:
奇数值

没有break、return或goto语句或具有相同常量值的switch case将产生编译时错误。

int x = 1;

switch (x)
{ 
    case 0:
        Console.WriteLine($"{x} is even value");
        break;
    case 1:
        Console.WriteLine($"{x} is odd Value");
        break;
    case 1: // 错误-控件无法从一个case标签(“ case 1:”)进入另一个 case 标签
        Console.WriteLine($"{x} is odd Value");
    defaut:
        Console.WriteLine($"{x} is odd Value");
        break;
}

嵌套 switch 语句

一个switch语句可以在另一个switch语句中使用。

int j = 5;

switch (j)
{
    case 5:
        Console.WriteLine(5);
        switch (j - 1)
        {
            case 4:
            Console.WriteLine(4);
            switch (j - 2)
            {
                case 3:
                Console.WriteLine(3);
                break;
            }
            break;
        }
        break;
    case 10:
        Console.WriteLine(10);
        break;
    case 15:
        Console.WriteLine(15);
        break;
    default:
        Console.WriteLine(100);
        break;
}
输出:
5 
4 
3
 要记住的要点:
  1. switch 语句是 if else 语句的代替方法。

  2. switch 语句根据指定为 case 的一组常量测试匹配表达式/变量。

  3. switch case 必须包含break、return、goto关键字才能退出 case。

  4. switch 可以包含一个可选的 default 标签,当不执行case时将执行该标签。

  5. C#编译器将给出关于case缺少:,常量值的错误,并退出case。

  6. 从C#7.0起,switch 条件可以包含非唯一值。在这种情况下,将执行第一个匹配情况。