# C# `switch`语句

> 原文： [https://www.programiz.com/csharp-programming/switch-statement](https://www.programiz.com/csharp-programming/switch-statement)

#### 在本文中，我们将学习 C# 中的`switch`语句以及如何在示例中使用它们。

`switch`语句可用于替换 C# 中的`if...else if`语句。 使用`switch`语句的好处是，使用`switch`看起来代码更清晰易读。

`switch`语句的语法为：

```cs
switch (variable/expression)
{
    case value1:
        // Statements executed if expression(or variable) = value1
        break;
    case value2:
        // Statements executed if expression(or variable) = value1
        break;
    ... ... ... 
    ... ... ... 
    default:
        // Statements executed if no case matches
}

```

`switch`语句求值`expression`（或`variable`），并将其值与每种情况下的值（或表达式）（`value1`，`value2`，…）。 当找到匹配值时，将执行该情况下的语句。

但是，如果以上情况均不匹配表达式，则将执行`default`块中的语句。`switch`末尾的默认语句与`if else`语句中的`else`块相似。

但是`switch`语句的问题是，当找到匹配值时，它将执行之后的所有语句，直到`switch`块结束。

为了避免这种情况，我们在每种情况下使用`break`语句。`break`语句通过终止`switch`语句的执行来阻止程序执行不匹配的语句。

要了解有关`break`语句的更多信息，请访问 *C# `break`语句*。

* * *

## 示例 1：C# `switch`语句

```cs
using System;

namespace Conditional
{
    class SwitchCase
    {
        public static void Main(string[] args)
        {
            char ch;
            Console.WriteLine("Enter an alphabet");
            ch = Convert.ToChar(Console.ReadLine());

            switch(Char.ToLower(ch))
            {
                case 'a':
                    Console.WriteLine("Vowel");
                    break;
                case 'e':
                    Console.WriteLine("Vowel");
                    break;
                case 'i':
                    Console.WriteLine("Vowel");
                    break;
                case 'o':
                    Console.WriteLine("Vowel");
                    break;
                case 'u':
                    Console.WriteLine("Vowel");
                    break;
                default:
                    Console.WriteLine("Not a vowel");
                    break;
            }
        }
    }
} 
```

当我们运行程序时，输出将是：

```cs
Enter an alphabet
X
Not a vowel 
```

在此示例中，提示用户输入字母。 如果字母为大写，则使用`ToLower()`方法将其转换为小写。

然后，`switch`语句检查用户输入的字母是否为`a, e, i, o or u`中的任何一个。

如果其中一种情况匹配，则打印`Vowel`，否则控制转到默认块，并且将`Not a vowel`打印为输出。

由于所有元音的输出都相同，因此我们可以将案例合并为：

* * *

## 示例 2：带有分组`case`的 C# `switch`语句

```cs
using System;

namespace Conditional
{
    class SwitchCase
    {
        public static void Main(string[] args)
        {
            char ch;
            Console.WriteLine("Enter an alphabet");
            ch = Convert.ToChar(Console.ReadLine());

            switch(Char.ToLower(ch))
            {
                case 'a':
                case 'e':
                case 'i':
                case 'o':
                case 'u':
                    Console.WriteLine("Vowel");
                    break;
                default:
                    Console.WriteLine("Not a vowel");
                    break;
            }
        }
    }
} 
```

两个程序的输出是相同的。 在上面的程序中，所有元音都打印输出`Vowel`，并从`switch`语句中断。

尽管`switch`语句使代码看起来比`if...else if`语句更干净，但是`switch`仅限于有限的数据类型。 C# 中的`switch`语句仅适用于：

*   基本数据类型：布尔型，字符型和整数型
*   *枚举类型（枚举）*
*   字符串类
*   以上数据类型的可空类型

* * *

## 示例 3：使用 C# 开关的简单计算器程序

```cs
using System;

namespace Conditional
{
    class SwitchCase
    {
        public static void Main(string[] args)
        {
            char op;
            double first, second, result;

            Console.Write("Enter first number: ");
            first = Convert.ToDouble(Console.ReadLine());
            Console.Write("Enter second number: ");
            second = Convert.ToDouble(Console.ReadLine());
            Console.Write("Enter operator (+, -, *, /): ");
            op = (char)Console.Read();

            switch(op)
            {
                case '+':
                    result = first + second;
                    Console.WriteLine("{0} + {1} = {2}", first, second, result);
                    break;

                case '-':
                    result = first - second;
                    Console.WriteLine("{0} - {1} = {2}", first, second, result);
                    break;

                case '*':
                    result = first * second;
                    Console.WriteLine("{0} * {1} = {2}", first, second, result);
                    break;

                case '/':
                    result = first / second;
                    Console.WriteLine("{0} / {1} = {2}", first, second, result);
                    break;

                default:
                    Console.WriteLine("Invalid Operator");
                    break;

            }
        }
    }
} 
```

When we run the program, the output will be:

```cs
Enter first number: -13.11
Enter second number: 2.41
Enter operator (+, -, *, /): *
-13.11 * 2.41 = -31.5951 
```

上面的程序将两个操作数和一个运算符作为用户的输入，并基于该运算符执行操作。

使用`ReadLine()`和`Read()`方法从用户那里获取输入。 要了解更多信息，请访问 [C# 基本输入和输出](/csharp-programming/basic-input-output "Basic input and output in C#")。

该程序使用`switch case`语句进行决策。 另外，我们可以使用`if-else if`梯形图执行相同的操作。