循环语句 #

一、循环语句概述 #

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