循环控制 #
一、循环控制概述 #
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