C#中的IEnumerable、ICollection、IList、List是常见的集合接口,它们都用于在程序中管理集合数据类型,但在某些情况下,它们之间的区别比较模糊。下面我们来详细讲解它们之间的区别。
IEnumerable
IEnumerable
IEnumerable<int> numbers = new List<int> { 1, 2, 3, 4 };
foreach (int number in numbers)
{
Console.WriteLine(number);
}
上述代码中的numbers是一个List
ICollection
ICollection
ICollection<int> numbers = new List<int> { 1, 2, 3, 4 };
numbers.Add(5);
numbers.Remove(3);
numbers.Contains(4);
上述代码中的numbers是一个ICollection
IList
IList
IList<int> numbers = new List<int> { 1, 2, 3, 4 };
numbers.Add(5);
numbers.Remove(3);
numbers.IndexOf(4);
上述代码中的numbers是一个IList
List
List
- 可以访问和修改元素
- 可以批量操作元素
用法如下:
List<int> numbers = new List<int> { 1, 2, 3, 4 };
numbers.Insert(2, 10);
numbers.AddRange(new[] { 5, 6, 7 });
numbers.RemoveAll(x => x % 2 == 0);
上述代码中的numbers是一个List
实例1:
IEnumerable<int> numbers = new List<int> { 1, 2, 3, 4 };
ICollection<int> collection = numbers as ICollection<int>;
Console.WriteLine(collection.Count()); // 输出为4
在上例中,我们可以将IEnumerable的实例转换成ICollection的实例,但是由于IEnumerable是只读的,因此在使用ICollection的方法时会有限制。
示例2:
IList<int> numbers = new List<int> { 1, 2, 3, 4 };
List<int> list = numbers as List<int>;
Console.WriteLine(list.Capacity); //输出为4
list.AddRange(new[] { 5, 6, 7 });
Console.WriteLine(list.Capacity); //输出为8
在上例中,我们可以将IList的实例转换成List的实例,这样我们可以使用更多的操作集合的方法。同时注意使用List的容量,当添加到超出容量时,List会按照一定的规则重新分配内存。
综上所述,IEnumerable只能单向迭代,ICollection提供了集合基本操作,IList提供了更多的访问和操作元素的方法,而List则是IList的实现并提供了更多的操作方法。根据不同的需求,我们可以选择不同的接口或类。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中IEnumerable、ICollection、IList、List之间的区别 - Python技术站