04_3.statement.md 6.0 KB

语句

迭代语句

以下语句重复执行语句或语句块:

  • for 语句:在指定的布尔表达式的计算结果为 true 时会执行其主体。
  • foreach 语句:枚举集合元素并对集合中的每个元素执行其主体。
  • do 语句:有条件地执行其主体一次或多次。
  • while 语句:有条件地执行其主体零次或多次。

在迭代语句的主体中的任何点上,可以使用 break 语句中断循环,或者可以使用 continue 语句继续执行到循环中的下一次迭代。

for语句

在指定的布尔表达式的计算结果为 true 时,for 语句会执行一条语句或一个语句块。

for (int i = 0; i < 3; i++)
{
    Console.Write(i);
}
// Output:
// 012

foreach 语句

foreach 语句为类型实例中实现 System.Collections.IEnumerableSystem.Collections.Generic.IEnumerable 接口的每个元素执行语句或语句块,如以下示例所示:

var fibNumbers = new List<int> { 0, 1, 1, 2, 3, 5, 8, 13 };
foreach (int element in fibNumbers)
{
    Console.Write($"{element} ");
}
// Output:
// 0 1 1 2 3 5 8 13

await foreach

从 C# 8.0 开始,可以使用 await foreach 语句来使用异步数据流,即实现 IAsyncEnumerable 接口的集合类型。 异步检索下一个元素时,可能会挂起循环的每次迭代。 下面的示例演示如何使用 await foreach 语句:

await foreach (var item in GenerateSequenceAsync())
{
    Console.WriteLine(item);
}

do语句

在指定的布尔表达式的计算结果为 true 时,do 语句会执行一条语句或一个语句块。 由于在每次执行循环之后都会计算此表达式,所以 do 循环会执行一次或多次。 这不同于 while 循环(该循环执行零次或多次)。

int n = 0;
do
{
    Console.Write(n);
    n++;
} while (n < 5);
// Output:
// 01234

while语句

在指定的布尔表达式的计算结果为 true 时,while 语句会执行一条语句或一个语句块。 由于在每次执行循环之前都会计算此表达式,所以 while 循环会执行零次或多次。 这不同于 do 循环,该循环执行一次或多次。

int n = 0;
while (n < 5)
{
    Console.Write(n);
    n++;
}
// Output:
// 01234

选择语句

下面的选择语句是从多个可能的语句中选择一条符合条件的来执行:

  • if语句
  • switch语句

if语句

if语句可以是一下两种形式的任何一种

  • 带else字句的if语句,根据bool表达式选择一个分支执行,如下例所示:
DisplayWeatherReport(15.0);  // Output: Cold.
DisplayWeatherReport(24.0);  // Output: Perfect!

void DisplayWeatherReport(double tempInCelsius)
{
    if (tempInCelsius < 20.0)
    {
        Console.WriteLine("Cold.");
    }
    else
    {
        Console.WriteLine("Perfect!");
    }
}
  • 只有if语句没有else字句
DisplayMeasurement(45);  // Output: The measurement value is 45
DisplayMeasurement(-3);  // Output: Warning: not acceptable value! The measurement value is -3

void DisplayMeasurement(double value)
{
    if (value < 0 || value > 100)
    {
        Console.Write("Warning: not acceptable value! ");
    }

    Console.WriteLine($"The measurement value is {value}");
}

可以嵌套多个if语句来检查多个条件,如下例所示:

DisplayCharacter('f');  // Output: A lowercase letter: f
DisplayCharacter('R');  // Output: An uppercase letter: R
DisplayCharacter('8');  // Output: A digit: 8
DisplayCharacter(',');  // Output: Not alphanumeric character: ,

void DisplayCharacter(char ch)
{
    if (char.IsUpper(ch))
    {
        Console.WriteLine($"An uppercase letter: {ch}");
    }
    else if (char.IsLower(ch))
    {
        Console.WriteLine($"A lowercase letter: {ch}");
    }
    else if (char.IsDigit(ch))
    {
        Console.WriteLine($"A digit: {ch}");
    }
    else
    {
        Console.WriteLine($"Not alphanumeric character: {ch}");
    }
}

switch语句

switch语句是从多个语句分支中根据表达式选择符合条件的语句执行,如下所示:

DisplayMeasurement(-4);  // Output: Measured value is -4; too low.
DisplayMeasurement(5);  // Output: Measured value is 5.
DisplayMeasurement(30);  // Output: Measured value is 30; too high.
DisplayMeasurement(double.NaN);  // Output: Failed measurement.

void DisplayMeasurement(double measurement)
{
    switch (measurement)
    {
        case < 0.0:
            Console.WriteLine($"Measured value is {measurement}; too low.");
            break;

        case > 15.0:
            Console.WriteLine($"Measured value is {measurement}; too high.");
            break;

        case double.NaN:
            Console.WriteLine("Failed measurement.");
            break;

        default:
            Console.WriteLine($"Measured value is {measurement}.");
            break;
    }
}