C# - Switch语句

本文关键字:语句 Switch | 更新日期: 2023-09-12 17:39:00

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

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

语法:
switch(match expression/variable)
{
    case constant-value:
        statement(s) to be executed;
        break;
    default: 
        statement(s) to be executed;
        break;
}

switch语句以包含匹配表达式或括号switch(match expression)变量的 switch 关键字开头。 此匹配表达式或变量的结果将根据大括号内指定为大小写的条件进行测试{ }。 必须使用唯一常量值指定案例,并以冒号:结尾。 每种情况都包含一个或多个要执行的语句。 如果常量值和匹配表达式/变量的值相等,则将执行该案例。 switch语句还可以包含可选的默认标签。如果未执行任何案例,则将执行默认标签。 breakreturngoto 关键字用于从switch大小写中退出程序控件。

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

int x = 10;
switch (x)
{ 
    case 5:
        Console.WriteLine("Value of x is 5");
        break;
    case 10:
        Console.WriteLine("Value of x is 10");
        break;
    case 15:
        Console.WriteLine("Value of x is 15");
        break;
    default:
        Console.WriteLine("Unknown value");
        break;
}

输出:

Value of x is 10

上面,switch(x)语句包含一个变量x其值将与每个事例值的值匹配。 上面的 switch 语句包含常量值为 5、10 和 15 的三种情况。它还包含默认标签,如果大小写值与switch变量/表达式不匹配,将执行该标签。 每个案例在 : 之后开始,并包含一个要执行的语句。x 的值与第二种情况case 10:匹配,因此输出将为 Value of x is 10

注意: switch 语句可以包含任何返回以下类型值的非空表达式:char、string、bool、int 或 enum。

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

int x = 125;
switch (x % 2)
{ 
    case 0:
        Console.WriteLine($"{x} is an even value");
        break;
    case 1:
        Console.WriteLine($"{x} is an odd Value");
        break;
}

输出:

125 is an odd value

Switch Case

Switch Case必须是唯一的常量值。它可以是布尔值、字符、字符串、整数、枚举或相应的可为 null 的类型。

注意: C# 7.0 及更高版本,Switch 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

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

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;
}

每个事例都必须使用 breakreturngoto 语句或其他方式显式退出事例,确保程序控件退出事例并且不会落入默认事例。

下面使用 return 关键字。

static void Main(string[] args)
{
    int x = 125;
    Console.Write( isOdd(x)? "Even value" : "Odd value");
}
static bool isOdd(int i, int j)
{
    switch (x % 2)
    { 
        case 0:
            return true;
        case 1:
            return false;
        default:
            return false;
    }
    
    return false;
}

输出:

Odd value

没有break, return, or goto语句或具有相同常量值的switch情况将给出编译时错误。

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: // Error - Control cannot fall through from one case label ('case 1:') to another
        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 语句根据指定为案例的一组常量测试匹配表达式/变量。
  3. switch案例必须包含中断、返回、goto 关键字才能退出案例。
  4. switch可以包含一个可选的默认标签,该标签将在未执行案例时执行。
  5. C#编译器将给出缺少:的错误,带有案例的常量值,从案例中退出。
  6. C# 7.0 及更高版本,switch案例可以包含非唯一值。在这种情况下,将执行第一个匹配案例。