跳到主要内容

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> 提供了 AddRemoveCount 等方法,使得集合可以动态调整。
  • 它适用于需要频繁修改集合内容的场景。

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>:支持通过索引访问和修改集合元素。

附加资源与练习

练习

  1. 创建一个 List<string>,实现添加、删除和遍历操作。
  2. 尝试使用 IEnumerable<T> 实现一个自定义集合类,并支持 foreach 遍历。

资源