C# 集合接口
介绍
在C#中,集合接口是用于定义集合行为的抽象接口。它们提供了一种标准化的方式来操作和管理数据集合,使得代码更具通用性和可扩展性。通过使用集合接口,你可以编写更灵活的代码,而不必关心具体的集合实现。
C#中常见的集合接口包括:
IEnumerable<T>
:提供遍历集合的能力。ICollection<T>
:扩展了IEnumerable<T>
,提供了添加、删除和计数等功能。IList<T>
:扩展了ICollection<T>
,提供了通过索引访问元素的能力。
接下来,我们将逐步讲解这些接口,并通过代码示例和实际案例帮助你更好地理解它们。
IEnumerable<T>
接口
IEnumerable<T>
是最基础的集合接口,它定义了一个方法 GetEnumerator()
,用于返回一个枚举器(enumerator),从而支持遍历集合中的元素。
代码示例
csharp
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
// 使用 foreach 遍历集合
foreach (int number in numbers)
{
Console.WriteLine(number);
}
}
}
输出:
1
2
3
4
5
解释
List<int>
实现了IEnumerable<int>
接口,因此可以使用foreach
循环遍历其中的元素。IEnumerable<T>
是 LINQ 查询的基础,几乎所有集合类型都实现了这个接口。
ICollection<T>
接口
ICollection<T>
接口扩展了 IEnumerable<T>
,并添加了添加、删除和计数等功能。它适用于需要动态修改集合的场景。
代码示例
csharp
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
ICollection<string> fruits = new List<string> { "Apple", "Banana" };
// 添加元素
fruits.Add("Cherry");
// 删除元素
fruits.Remove("Apple");
// 输出集合中的元素数量
Console.WriteLine($"Number of fruits: {fruits.Count}");
// 遍历集合
foreach (string fruit in fruits)
{
Console.WriteLine(fruit);
}
}
}
输出:
Number of fruits: 2
Banana
Cherry
解释
ICollection<T>
提供了Add
、Remove
和Count
等方法,使得集合可以动态调整。- 它适用于需要频繁修改集合内容的场景。
IList<T>
接口
IList<T>
接口进一步扩展了 ICollection<T>
,并添加了通过索引访问元素的能力。它适用于需要随机访问集合元素的场景。
代码示例
csharp
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
IList<int> numbers = new List<int> { 10, 20, 30 };
// 通过索引访问元素
Console.WriteLine($"First number: {numbers[0]}");
// 修改元素
numbers[1] = 25;
// 遍历集合
foreach (int number in numbers)
{
Console.WriteLine(number);
}
}
}
输出:
First number: 10
10
25
30
解释
IList<T>
提供了通过索引访问和修改元素的能力。- 它适用于需要随机访问和修改集合元素的场景。
实际应用场景
场景:学生成绩管理
假设你需要管理一组学生的成绩,并支持添加、删除和查询操作。使用 IList<T>
可以轻松实现这些功能。
csharp
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
IList<double> grades = new List<double> { 85.5, 90.0, 78.3 };
// 添加新成绩
grades.Add(88.7);
// 删除一个成绩
grades.Remove(78.3);
// 查询第一个成绩
Console.WriteLine($"First grade: {grades[0]}");
// 遍历所有成绩
foreach (double grade in grades)
{
Console.WriteLine(grade);
}
}
}
输出:
First grade: 85.5
85.5
90
88.7
总结
C#中的集合接口(如 IEnumerable<T>
、ICollection<T>
和 IList<T>
)为操作和管理数据集合提供了标准化的方法。通过理解这些接口,你可以编写更灵活和通用的代码。
IEnumerable<T>
:支持遍历集合。ICollection<T>
:支持动态修改集合。IList<T>
:支持通过索引访问和修改集合元素。
附加资源与练习
练习
- 创建一个
List<string>
,实现添加、删除和遍历操作。 - 尝试使用
IEnumerable<T>
实现一个自定义集合类,并支持foreach
遍历。