循环控制 #

一、循环控制概述 #

C#提供了以下循环控制语句:

语句 说明
break 跳出循环
continue 跳过当前迭代
return 退出方法
goto 跳转到标签(不推荐)
throw 抛出异常

二、break语句 #

2.1 在for循环中使用 #

csharp
for (int i = 0; i < 10; i++)
{
    if (i == 5)
    {
        Console.WriteLine("找到5,退出循环");
        break;
    }
    Console.WriteLine(i);
}

2.2 在while循环中使用 #

csharp
int count = 0;
while (true)
{
    Console.WriteLine(count);
    count++;
    
    if (count >= 5)
    {
        Console.WriteLine("达到上限,退出循环");
        break;
    }
}

2.3 在foreach循环中使用 #

csharp
var numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

foreach (var n in numbers)
{
    if (n == 5)
    {
        Console.WriteLine("找到5,退出循环");
        break;
    }
    Console.WriteLine(n);
}

2.4 在switch中使用 #

csharp
int day = 3;
switch (day)
{
    case 1:
        Console.WriteLine("星期一");
        break;
    case 2:
        Console.WriteLine("星期二");
        break;
    default:
        Console.WriteLine("其他");
        break;
}

2.5 嵌套循环中的break #

csharp
for (int i = 0; i < 3; i++)
{
    for (int j = 0; j < 3; j++)
    {
        if (j == 1)
            break;
        Console.WriteLine($"i={i}, j={j}");
    }
}

2.6 查找元素 #

csharp
public static int? FindFirst(List<int> numbers, Func<int, bool> predicate)
{
    foreach (var n in numbers)
    {
        if (predicate(n))
            return n;
    }
    return null;
}

var numbers = new List<int> { 1, 2, 3, 4, 5 };
var first = FindFirst(numbers, n => n > 3);
Console.WriteLine(first);

三、continue语句 #

3.1 在for循环中使用 #

csharp
for (int i = 0; i < 10; i++)
{
    if (i % 2 == 0)
        continue;
    Console.WriteLine(i);
}

3.2 在while循环中使用 #

csharp
int i = 0;
while (i < 10)
{
    i++;
    if (i % 3 == 0)
        continue;
    Console.WriteLine(i);
}

3.3 在foreach循环中使用 #

csharp
var names = new List<string> { "张三", "", "李四", null, "王五" };

foreach (var name in names)
{
    if (string.IsNullOrEmpty(name))
        continue;
    Console.WriteLine(name);
}

3.4 过滤处理 #

csharp
var numbers = new List<int> { 1, -2, 3, -4, 5, -6, 7, -8, 9, -10 };
int sum = 0;

foreach (var n in numbers)
{
    if (n < 0)
        continue;
    sum += n;
}
Console.WriteLine($"正数之和:{sum}");

3.5 数据验证 #

csharp
var users = new List<User>
{
    new User { Name = "张三", Age = 25, IsActive = true },
    new User { Name = "李四", Age = 17, IsActive = true },
    new User { Name = "王五", Age = 30, IsActive = false },
    new User { Name = "赵六", Age = 22, IsActive = true }
};

foreach (var user in users)
{
    if (!user.IsActive)
        continue;
    
    if (user.Age < 18)
        continue;
    
    Console.WriteLine($"有效用户:{user.Name}");
}

四、return语句 #

4.1 基本用法 #

csharp
public int Add(int a, int b)
{
    return a + b;
}

public void PrintMessage(string message)
{
    if (string.IsNullOrEmpty(message))
        return;
    
    Console.WriteLine(message);
}

4.2 提前返回 #

csharp
public string GetGrade(int score)
{
    if (score < 0 || score > 100)
        return "无效分数";
    
    if (score >= 90) return "优秀";
    if (score >= 80) return "良好";
    if (score >= 70) return "中等";
    if (score >= 60) return "及格";
    return "不及格";
}

4.3 在循环中使用 #

csharp
public int FindIndex(int[] array, int target)
{
    for (int i = 0; i < array.Length; i++)
    {
        if (array[i] == target)
            return i;
    }
    return -1;
}

public bool Contains(List<int> list, int value)
{
    foreach (var item in list)
    {
        if (item == value)
            return true;
    }
    return false;
}

4.4 验证模式 #

csharp
public bool ValidateUser(User user)
{
    if (user == null)
        return false;
    
    if (string.IsNullOrEmpty(user.Name))
        return false;
    
    if (user.Age < 0 || user.Age > 150)
        return false;
    
    if (!user.Email.Contains("@"))
        return false;
    
    return true;
}

五、goto语句 #

5.1 基本用法(不推荐) #

csharp
int i = 0;

start:
Console.WriteLine(i);
i++;

if (i < 5)
    goto start;

5.2 在switch中使用 #

csharp
int number = 10;

switch (number)
{
    case 10:
        Console.WriteLine("是10");
        goto case 20;
    case 20:
        Console.WriteLine("处理20");
        break;
}

5.3 错误处理 #

csharp
public void Process()
{
    if (!Initialize())
        goto error;
    
    if (!LoadData())
        goto error;
    
    if (!ProcessData())
        goto error;
    
    SaveResult();
    return;
    
error:
    Console.WriteLine("处理失败");
}

六、throw语句 #

6.1 抛出异常 #

csharp
public void SetAge(int age)
{
    if (age < 0)
        throw new ArgumentException("年龄不能为负数");
    
    _age = age;
}

6.2 在循环中使用 #

csharp
public int FindFirstNegative(int[] numbers)
{
    foreach (var n in numbers)
    {
        if (n < 0)
            throw new InvalidOperationException($"发现负数:{n}");
    }
    return 0;
}

七、实战示例 #

7.1 查找算法 #

csharp
public static int LinearSearch(int[] array, int target)
{
    for (int i = 0; i < array.Length; i++)
    {
        if (array[i] == target)
            return i;
    }
    return -1;
}

public static int BinarySearch(int[] array, int target)
{
    int left = 0, 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;
}

7.2 数据处理 #

csharp
public static List<int> FilterAndProcess(List<int> numbers)
{
    var result = new List<int>();
    
    foreach (var n in numbers)
    {
        if (n < 0)
            continue;
        
        if (n > 1000)
            break;
        
        result.Add(n * 2);
    }
    
    return result;
}

7.3 输入验证 #

csharp
public static int GetValidNumber(string prompt, int min, int max)
{
    while (true)
    {
        Console.Write(prompt);
        string input = Console.ReadLine();
        
        if (!int.TryParse(input, out int number))
        {
            Console.WriteLine("请输入有效数字");
            continue;
        }
        
        if (number < min || number > max)
        {
            Console.WriteLine($"请输入{min}到{max}之间的数字");
            continue;
        }
        
        return number;
    }
}

7.4 重试机制 #

csharp
public static T Retry<T>(Func<T> action, int maxRetries, int delayMs)
{
    int attempts = 0;
    
    while (true)
    {
        try
        {
            return action();
        }
        catch (Exception ex)
        {
            attempts++;
            
            if (attempts >= maxRetries)
                throw;
            
            Console.WriteLine($"第{attempts}次尝试失败:{ex.Message}");
            Thread.Sleep(delayMs);
        }
    }
}

八、最佳实践 #

8.1 使用return代替复杂标志 #

csharp
public bool ProcessData(Data data)
{
    if (data == null)
        return false;
    
    if (!Validate(data))
        return false;
    
    Save(data);
    return true;
}

public bool ProcessData(Data data)
{
    bool success = true;
    
    if (data == null)
        success = false;
    else if (!Validate(data))
        success = false;
    else
        Save(data);
    
    return success;
}

8.2 避免深层嵌套 #

csharp
foreach (var item in items)
{
    if (!IsValid(item))
        continue;
    
    if (ShouldSkip(item))
        continue;
    
    Process(item);
}

foreach (var item in items)
{
    if (IsValid(item))
    {
        if (!ShouldSkip(item))
        {
            Process(item);
        }
    }
}

8.3 使用LINQ简化 #

csharp
var validItems = items
    .Where(item => IsValid(item))
    .Where(item => !ShouldSkip(item))
    .ToList();

foreach (var item in validItems)
{
    Process(item);
}

九、总结 #

循环控制要点:

语句 说明
break 跳出整个循环
continue 跳过当前迭代
return 退出方法
throw 抛出异常

下一步,让我们学习数组!

最后更新:2026-03-26