以下语句重复执行语句或语句块:
for
语句:在指定的布尔表达式的计算结果为 true
时会执行其主体。foreach
语句:枚举集合元素并对集合中的每个元素执行其主体。do
语句:有条件地执行其主体一次或多次。while
语句:有条件地执行其主体零次或多次。在迭代语句的主体中的任何点上,可以使用 break 语句中断循环,或者可以使用 continue 语句继续执行到循环中的下一次迭代。
在指定的布尔表达式的计算结果为 true
时,for
语句会执行一条语句或一个语句块。
for (int i = 0; i < 3; i++)
{
Console.Write(i);
}
// Output:
// 012
foreach
语句为类型实例中实现 System.Collections.IEnumerable 或 System.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
从 C# 8.0 开始,可以使用 await foreach
语句来使用异步数据流,即实现 IAsyncEnumerable 接口的集合类型。 异步检索下一个元素时,可能会挂起循环的每次迭代。 下面的示例演示如何使用 await foreach
语句:
await foreach (var item in GenerateSequenceAsync())
{
Console.WriteLine(item);
}
在指定的布尔表达式的计算结果为 true
时,do
语句会执行一条语句或一个语句块。 由于在每次执行循环之后都会计算此表达式,所以 do
循环会执行一次或多次。 这不同于 while 循环(该循环执行零次或多次)。
int n = 0;
do
{
Console.Write(n);
n++;
} while (n < 5);
// Output:
// 01234
在指定的布尔表达式的计算结果为 true
时,while
语句会执行一条语句或一个语句块。 由于在每次执行循环之前都会计算此表达式,所以 while
循环会执行零次或多次。 这不同于 do 循环,该循环执行一次或多次。
int n = 0;
while (n < 5)
{
Console.Write(n);
n++;
}
// Output:
// 01234
下面的选择语句是从多个可能的语句中选择一条符合条件的来执行:
if语句可以是一下两种形式的任何一种
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!");
}
}
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语句是从多个语句分支中根据表达式选择符合条件的语句执行,如下所示:
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;
}
}