循环语句 #
一、循环语句概述 #
C#提供了以下循环语句:
| 语句 | 说明 |
|---|---|
| while | 先判断后执行 |
| do-while | 先执行后判断 |
| for | 计数循环 |
| foreach | 集合遍历 |
二、while循环 #
2.1 基本语法 #
csharp
while (condition)
{
}
2.2 使用示例 #
csharp
int count = 0;
while (count < 5)
{
Console.WriteLine($"计数:{count}");
count++;
}
int sum = 0;
int i = 1;
while (i <= 100)
{
sum += i;
i++;
}
Console.WriteLine($"1到100的和:{sum}");
2.3 读取输入直到满足条件 #
csharp
string input;
while (true)
{
Console.Write("请输入数字(输入q退出):");
input = Console.ReadLine();
if (input == "q")
break;
if (int.TryParse(input, out int number))
{
Console.WriteLine($"输入的数字:{number}");
}
}
2.4 处理集合 #
csharp
var numbers = new List<int> { 1, 2, 3, 4, 5 };
int index = 0;
while (index < numbers.Count)
{
Console.WriteLine(numbers[index]);
index++;
}
三、do-while循环 #
3.1 基本语法 #
csharp
do
{
} while (condition);
3.2 使用示例 #
csharp
int count = 0;
do
{
Console.WriteLine($"计数:{count}");
count++;
} while (count < 5);
string password;
do
{
Console.Write("请输入密码:");
password = Console.ReadLine();
} while (password != "123456");
Console.WriteLine("密码正确!");
3.3 菜单选择 #
csharp
int choice;
do
{
Console.WriteLine("=== 菜单 ===");
Console.WriteLine("1. 新建");
Console.WriteLine("2. 打开");
Console.WriteLine("3. 保存");
Console.WriteLine("0. 退出");
Console.Write("请选择:");
if (int.TryParse(Console.ReadLine(), out choice))
{
switch (choice)
{
case 1:
Console.WriteLine("执行新建操作");
break;
case 2:
Console.WriteLine("执行打开操作");
break;
case 3:
Console.WriteLine("执行保存操作");
break;
case 0:
Console.WriteLine("退出程序");
break;
default:
Console.WriteLine("无效选择");
break;
}
}
} while (choice != 0);
3.4 while vs do-while #
csharp
int x = 10;
while (x < 5)
{
Console.WriteLine("while循环执行");
}
do
{
Console.WriteLine("do-while循环执行");
} while (x < 5);
四、for循环 #
4.1 基本语法 #
csharp
for (初始化; 条件; 迭代)
{
}
4.2 使用示例 #
csharp
for (int i = 0; i < 5; i++)
{
Console.WriteLine($"i = {i}");
}
for (int i = 10; i >= 0; i -= 2)
{
Console.WriteLine($"倒计时:{i}");
}
for (int i = 1, j = 10; i <= j; i++, j--)
{
Console.WriteLine($"i = {i}, j = {j}");
}
4.3 嵌套循环 #
csharp
for (int i = 1; i <= 9; i++)
{
for (int j = 1; j <= i; j++)
{
Console.Write($"{j}×{i}={i * j}\t");
}
Console.WriteLine();
}
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
Console.Write("* ");
}
Console.WriteLine();
}
4.4 遍历数组 #
csharp
int[] numbers = { 1, 2, 3, 4, 5 };
for (int i = 0; i < numbers.Length; i++)
{
Console.WriteLine($"numbers[{i}] = {numbers[i]}");
}
for (int i = numbers.Length - 1; i >= 0; i--)
{
Console.WriteLine(numbers[i]);
}
4.5 省略部分 #
csharp
int i = 0;
for (; i < 5; i++)
{
Console.WriteLine(i);
}
for (int j = 0; ; j++)
{
if (j >= 5) break;
Console.WriteLine(j);
}
for (;;)
{
Console.WriteLine("无限循环");
break;
}
五、foreach循环 #
5.1 基本语法 #
csharp
foreach (var item in collection)
{
}
5.2 使用示例 #
csharp
int[] numbers = { 1, 2, 3, 4, 5 };
foreach (int number in numbers)
{
Console.WriteLine(number);
}
var names = new List<string> { "张三", "李四", "王五" };
foreach (var name in names)
{
Console.WriteLine($"姓名:{name}");
}
var scores = new Dictionary<string, int>
{
["张三"] = 85,
["李四"] = 92,
["王五"] = 78
};
foreach (var kvp in scores)
{
Console.WriteLine($"{kvp.Key}: {kvp.Value}分");
}
5.3 遍历字符串 #
csharp
string text = "Hello";
foreach (char c in text)
{
Console.WriteLine(c);
}
5.4 使用索引(C# 9+) #
csharp
var names = new List<string> { "张三", "李四", "王五" };
foreach (var (name, index) in names.Select((n, i) => (n, i)))
{
Console.WriteLine($"[{index}] {name}");
}
5.5 foreach vs for #
csharp
var list = new List<int> { 1, 2, 3, 4, 5 };
foreach (var item in list)
{
Console.WriteLine(item);
}
for (int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i]);
}
六、循环控制语句 #
6.1 break #
跳出整个循环:
csharp
for (int i = 0; i < 10; i++)
{
if (i == 5)
break;
Console.WriteLine(i);
}
var numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
foreach (var n in numbers)
{
if (n > 5)
break;
Console.WriteLine(n);
}
6.2 continue #
跳过当前迭代:
csharp
for (int i = 0; i < 10; i++)
{
if (i % 2 == 0)
continue;
Console.WriteLine(i);
}
var numbers = new List<int> { 1, 2, 3, 4, 5 };
foreach (var n in numbers)
{
if (n == 3)
continue;
Console.WriteLine(n);
}
6.3 return #
退出方法:
csharp
public int FindFirstNegative(int[] numbers)
{
foreach (var n in numbers)
{
if (n < 0)
return n;
}
return 0;
}
七、实战示例 #
7.1 阶乘计算 #
csharp
public static long Factorial(int n)
{
if (n < 0) throw new ArgumentException("不能为负数");
if (n == 0 || n == 1) return 1;
long result = 1;
for (int i = 2; i <= n; i++)
{
result *= i;
}
return result;
}
7.2 斐波那契数列 #
csharp
public static IEnumerable<int> Fibonacci(int count)
{
int a = 0, b = 1;
for (int i = 0; i < count; i++)
{
yield return a;
(a, b) = (b, a + b);
}
}
foreach (var n in Fibonacci(10))
{
Console.WriteLine(n);
}
7.3 素数判断 #
csharp
public static bool IsPrime(int n)
{
if (n < 2) return false;
if (n == 2) return true;
if (n % 2 == 0) return false;
for (int i = 3; i <= Math.Sqrt(n); i += 2)
{
if (n % i == 0)
return false;
}
return true;
}
7.4 二分查找 #
csharp
public static int BinarySearch(int[] array, int target)
{
int left = 0;
int right = array.Length - 1;
while (left <= right)
{
int mid = left + (right - left) / 2;
if (array[mid] == target)
return mid;
if (array[mid] < target)
left = mid + 1;
else
right = mid - 1;
}
return -1;
}
八、最佳实践 #
8.1 选择合适的循环 #
| 场景 | 推荐循环 |
|---|---|
| 遍历集合 | foreach |
| 已知次数 | for |
| 条件循环 | while |
| 至少执行一次 | do-while |
8.2 避免无限循环 #
csharp
while (true)
{
if (ShouldExit())
break;
Process();
}
int count = 0;
while (count < 10)
{
count++;
}
8.3 使用LINQ替代复杂循环 #
csharp
var evenNumbers = new List<int>();
foreach (var n in numbers)
{
if (n % 2 == 0)
evenNumbers.Add(n);
}
var evenNumbers = numbers.Where(n => n % 2 == 0).ToList();
九、总结 #
循环语句要点:
| 语句 | 说明 |
|---|---|
| while | 先判断后执行 |
| do-while | 先执行后判断 |
| for | 计数循环 |
| foreach | 集合遍历 |
| break | 跳出循环 |
| continue | 跳过迭代 |
下一步,让我们学习循环控制!
最后更新:2026-03-26