C# 自定义集合
介绍
在 C# 中,集合是用于存储和管理一组对象的常用数据结构。虽然 .NET 提供了许多内置的集合类(如 List<T>
、Dictionary<TKey, TValue>
等),但在某些情况下,你可能需要创建自定义集合以满足特定需求。自定义集合允许你定义自己的数据结构和操作逻辑,从而更好地控制数据的存储和访问方式。
本文将逐步讲解如何创建自定义集合,并通过实际案例展示其应用场景。
什么是自定义集合?
自定义集合是指通过继承或实现 .NET 集合接口(如 IEnumerable<T>
、ICollection<T>
等)来创建符合特定需求的集合类。通过自定义集合,你可以:
- 定义特定的数据存储结构。
- 添加自定义的操作方法。
- 控制集合的行为(如添加、删除、遍历等)。
创建自定义集合
1. 实现 IEnumerable<T>
接口
IEnumerable<T>
是 .NET 中最基本的集合接口,它允许你使用 foreach
循环遍历集合中的元素。要实现自定义集合,首先需要实现这个接口。
public class CustomCollection<T> : IEnumerable<T>
{
private List<T> _items = new List<T>();
public void Add(T item)
{
_items.Add(item);
}
public IEnumerator<T> GetEnumerator()
{
return _items.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
2. 添加自定义方法
在自定义集合中,你可以添加任何你需要的方法。例如,以下代码展示了如何添加一个 RemoveAll
方法,用于删除集合中所有满足特定条件的元素。
public class CustomCollection<T> : IEnumerable<T>
{
private List<T> _items = new List<T>();
public void Add(T item)
{
_items.Add(item);
}
public void RemoveAll(Predicate<T> match)
{
_items.RemoveAll(match);
}
public IEnumerator<T> GetEnumerator()
{
return _items.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
3. 使用自定义集合
以下是如何使用自定义集合的示例:
CustomCollection<int> numbers = new CustomCollection<int>();
numbers.Add(1);
numbers.Add(2);
numbers.Add(3);
numbers.Add(4);
numbers.RemoveAll(x => x % 2 == 0); // 删除所有偶数
foreach (var number in numbers)
{
Console.WriteLine(number); // 输出: 1, 3
}
实际案例:自定义只读集合
在某些情况下,你可能需要一个只读集合,即集合中的元素不能被修改。以下是如何实现一个自定义只读集合的示例:
public class ReadOnlyCollection<T> : IEnumerable<T>
{
private List<T> _items;
public ReadOnlyCollection(IEnumerable<T> items)
{
_items = new List<T>(items);
}
public IEnumerator<T> GetEnumerator()
{
return _items.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
使用示例:
List<int> originalList = new List<int> { 1, 2, 3, 4 };
ReadOnlyCollection<int> readOnlyNumbers = new ReadOnlyCollection<int>(originalList);
foreach (var number in readOnlyNumbers)
{
Console.WriteLine(number); // 输出: 1, 2, 3, 4
}
// 以下代码将导致编译错误,因为集合是只读的
// readOnlyNumbers.Add(5);
总结
自定义集合是 C# 中一个强大的功能,它允许你根据特定需求创建自己的集合类。通过实现 IEnumerable<T>
接口和添加自定义方法,你可以完全控制集合的行为和操作。
在实际开发中,自定义集合可以用于各种场景,如创建只读集合、实现特定的数据存储结构等。掌握自定义集合的实现方法将帮助你更好地理解 .NET 集合框架,并提升你的编程能力。
附加资源与练习
- 练习 1:创建一个自定义集合类,实现
ICollection<T>
接口,并添加一个Find
方法,用于查找集合中满足特定条件的元素。 - 练习 2:扩展自定义集合类,使其支持线程安全的操作。
- 资源:阅读 .NET 官方文档 以了解更多关于集合和接口的内容。
在实现自定义集合时,建议先了解 .NET 提供的标准集合接口(如 IEnumerable<T>
、ICollection<T>
、IList<T>
等),以便更好地设计你的集合类。