foreach遍历list举例
时间: 2025-07-11 13:36:37 浏览: 4
<think>嗯,用户之前问过关于C#的foreach循环的介绍,现在又要求举例说明如何使用foreach遍历List。看来用户可能已经理解了基本概念,现在需要具体的例子来巩固知识。我需要确保例子简洁明了,覆盖常见的使用场景。
首先,用户可能是一个刚开始学习C#的开发者,或者对集合操作不太熟悉。他们可能需要看到实际的代码示例来理解如何应用foreach在List上。之前的回答里已经有一个数组的例子,但List和数组在使用上有相似之处,不过List更动态,所以举List的例子会更贴切。
接下来,我应该考虑用户可能的深层需求。他们可能想知道如何在遍历时访问元素,或者处理特定类型的数据,比如自定义对象。此外,可能还想了解在遍历过程中是否能修改元素或集合,以及如何处理异常情况。
在之前的回答中,已经提到foreach不能修改集合元素(对于值类型)和遍历时不能增删元素,所以在举例时需要注意这些点。例如,可以展示如何遍历List<string>,然后展示一个包含自定义类的List,说明如何访问属性。同时,可以提醒用户如果在遍历时尝试修改集合会导致异常,并给出替代方法,比如使用for循环倒序遍历删除元素。
另外,用户可能对性能有疑问,但之前的回答提到了性能优化部分,可能不需要在例子中深入,除非有特别需要注意的地方。但如果有机会的话,可以简要提到使用for循环更高效的情况。
最后,确保代码示例正确,符合C#语法规范,并且注释清晰,解释每个步骤的作用。同时,保持语言简洁,结构清晰,方便用户一步步理解和实践。</think>让我们通过具体示例理解`foreach`遍历`List<T>`的操作:
### 基础示例:遍历字符串列表
```csharp
List<string> cities = new List<string> { "北京", "上海", "广州", "深圳" };
foreach (string city in cities)
{
Console.WriteLine($"当前城市: {city}");
}
```
输出结果:
```
当前城市: 北京
当前城市: 上海
当前城市: 广州
当前城市: 深圳
```
### 进阶示例:对象列表遍历
```csharp
// 定义数据类
public class Student
{
public string Name { get; set; }
public int Score { get; set; }
}
List<Student> students = new List<Student>
{
new Student { Name = "张三", Score = 85 },
new Student { Name = "李四", Score = 92 },
new Student { Name = "王五", Score = 78 }
};
foreach (Student stu in students)
{
Console.WriteLine($"{stu.Name}的成绩:{stu.Score}分");
}
```
输出结果:
```
张三的成绩:85分
李四的成绩:92分
王五的成绩:78分
```
### 关键注意点:
1. **元素修改限制**
```csharp
foreach (Student stu in students)
{
stu.Score += 5; // 允许(修改引用类型对象的属性)
// stu = new Student(); // 编译错误!禁止替换整个对象
}
```
2. **集合修改限制**
```csharp
foreach (var item in students)
{
students.Remove(item); // 运行时抛出InvalidOperationException
}
```
3. **类型推断优化**
```csharp
foreach (var city in cities) // 使用var自动推断类型
{
Console.WriteLine(city.ToUpper());
}
```
### 实用技巧:带条件的遍历
```csharp
foreach (var stu in students.Where(s => s.Score >= 80))
{
Console.WriteLine($"优秀学生:{stu.Name}");
}
```
输出结果:
```
优秀学生:张三
优秀学生:李四
```
### 性能建议:
- 遍历`List<int>`等值类型集合时,优先使用`for`循环
- 需要过滤数据时,建议先通过`Where()`筛选再遍历
- 避免在循环内执行复杂操作,保持循环体轻量化
> 当需要修改集合内容时,推荐使用反向`for`循环:
> ```csharp
> for (int i = students.Count - 1; i >= 0; i--)
> {
> if (students[i].Score < 60)
> {
> students.RemoveAt(i);
> }
> }
> ```
阅读全文
相关推荐


















