📅  最后修改于: 2023-12-03 14:39:43.172000             🧑  作者: Mango
在C#中,IEnumerable和List都是常用的集合类型。它们都可以用来存储一组数据,并且都可以用foreach循环进行遍历。不过两者还是有区别的,下面我们来一一介绍。
IEnumerable接口位于System.Collections命名空间中,它是所有集合类型都实现的接口。该接口定义了一个方法GetEnumerator(),返回一个IEnumerator迭代器对象。使用IEnumerator迭代器对象可以遍历集合中的元素,也可以使用MoveNext()方法将迭代器移动到下一个元素。
示例代码:
IEnumerable<int> numbers = new List<int>() { 1, 2, 3 };
foreach (int number in numbers)
{
Console.WriteLine(number);
}
// 输出:1 2 3
在上面的示例中,我们创建了一个IEnumerable类型的集合numbers,并用foreach循环依次输出了其中的元素。需要注意的是,在IEnumerable中,我们只能对集合进行只读访问,不能对集合进行修改。
List继承自IEnumerable,位于System.Collections.Generic命名空间中,它是一个动态数组。和数组一样,List中的元素是连续的,并且可以使用索引进行访问。与数组不同的是,List可以自动扩展,能够非常方便地进行元素的增加、删除以及插入操作。
示例代码:
List<int> numbers = new List<int>() { 1, 2, 3 };
numbers.Add(4); // 添加元素4到List中
numbers.RemoveAt(0); // 删除第一个元素1
for (int i = 0; i < numbers.Count; i++)
{
Console.WriteLine(numbers[i]);
}
// 输出:2 3 4
在上面的示例中,我们创建了一个List类型的集合numbers,先添加了一个元素4,然后删除了第一个元素1,最后通过for循环遍历输出了List中的所有元素。需要注意的是,在List中,我们可以对集合进行增删改的操作。
我们可以使用ToList()方法将IEnumerable类型的集合转换为List类型的集合。该方法会遍历整个IEnumerable集合,将元素一个一个添加到List中,并返回一个新的List对象。
示例代码:
IEnumerable<int> numbers = new List<int>() { 1, 2, 3 };
List<int> list = numbers.ToList();
list.Add(4); // 在List中添加元素4
for (int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i]);
}
// 输出:1 2 3 4
在上面的示例中,我们将一个IEnumerable类型的集合numbers转换为List类型的集合list,并在List中添加了一个元素4。最后我们用for循环遍历输出了List中的所有元素。需要注意的是,经过转换后获得的List对象,我们可以对其进行增删改的操作。