C#中的StringCollection类位于System.Collections.Specialized命名空间下,是专门为存储字符串对象设计的集合类型,它实现了IList接口,提供了有序的字符串集合管理能力,在早期.NET版本中被广泛使用。

StringCollection类的基础特性
StringCollection的本质是一个可动态扩容的字符串集合,它的内部存储结构基于ArrayList实现,所有元素都是string类型,不需要像使用ArrayList那样进行类型转换,一定程度上避免了类型不安全的操作。不过它属于非泛型集合,在泛型集合普及后,使用频率有所下降。
核心属性
- Count:获取集合中当前存储的字符串元素数量,是只读属性。
- Item[int index]:通过索引获取或设置指定位置的字符串元素,支持索引器访问。
常用方法
- Add(string value):向集合末尾添加一个字符串元素,返回添加元素的索引位置。
- AddRange(string[] value):向集合末尾添加一组字符串元素,参数是字符串数组。
- Remove(string value):从集合中移除指定的字符串元素,如果存在多个相同元素,只移除第一个匹配项。
- RemoveAt(int index):移除指定索引位置的字符串元素。
- Clear():清空集合中的所有元素。
- Contains(string value):判断集合中是否包含指定的字符串元素,返回布尔值。
- IndexOf(string value):返回指定字符串在集合中首次出现的索引位置,如果不存在则返回-1。
- Insert(int index, string value):在指定索引位置插入一个字符串元素。
- CopyTo(string[] array, int index):将集合中的所有元素复制到一个字符串数组中,从数组的指定索引开始存放。
StringCollection的使用示例
首先需要引入对应的命名空间,然后就可以创建和使用StringCollection实例,以下是基础的使用代码示例:
using System;
using System.Collections.Specialized;
namespace StringCollectionDemo
{
class Program
{
static void Main(string[] args)
{
// 创建StringCollection实例
StringCollection strCollection = new StringCollection();
// 添加单个字符串
strCollection.Add("苹果");
strCollection.Add("香蕉");
// 添加一组字符串
strCollection.AddRange(new string[] { "橙子", "葡萄", "西瓜" });
Console.WriteLine("集合当前元素数量:" + strCollection.Count);
// 遍历集合元素
Console.WriteLine("集合中的所有元素:");
for (int i = 0; i < strCollection.Count; i++)
{
Console.WriteLine($"索引{i}:{strCollection[i]}");
}
// 判断元素是否存在
bool hasBanana = strCollection.Contains("香蕉");
Console.WriteLine("集合中是否包含香蕉:" + hasBanana);
// 插入元素
strCollection.Insert(1, "芒果");
Console.WriteLine("插入芒果后索引1的元素:" + strCollection[1]);
// 移除元素
strCollection.Remove("橙子");
Console.WriteLine("移除橙子后的元素数量:" + strCollection.Count);
// 复制到数组
string[] strArray = new string[strCollection.Count];
strCollection.CopyTo(strArray, 0);
Console.WriteLine("复制到数组的第一个元素:" + strArray[0]);
// 清空集合
strCollection.Clear();
Console.WriteLine("清空后集合元素数量:" + strCollection.Count);
}
}
}
StringCollection与List<string>的对比
在C#泛型普及后,List<string>成为了存储字符串集合的主流选择,两者的区别如下:
| 对比维度 | StringCollection | List<string> |
|---|---|---|
| 命名空间 | System.Collections.Specialized | System.Collections.Generic |
| 类型特性 | 非泛型集合,专门存储字符串 | 泛型集合,可存储任意指定类型 |
| 类型安全 | 不需要装箱拆箱,但添加非字符串会编译报错 | 编译期类型检查,完全类型安全 |
| 功能扩展 | 方法较少,功能基础 | 支持LINQ操作,扩展方法丰富 |
| 适用场景 | 兼容旧版本.NET代码,简单字符串存储 | 新项目优先选择,复杂操作更方便 |
使用注意事项
- StringCollection允许存储null值,添加null不会报错,遍历时需要注意处理null的情况,避免出现空引用异常。
- 它的Contains和IndexOf方法判断字符串时是区分大小写的,如果需要不区分大小写的查找,需要自己实现遍历逻辑或者使用其他集合类型。
- 如果是新开发的C#项目,没有特殊的兼容需求,建议优先使用List<string>,功能更完善,也更符合现代C#的开发习惯。
- 如果需要序列化StringCollection,它的序列化支持和普通集合一致,注意处理其中的null元素即可。
适用场景总结
StringCollection适合在以下场景使用:需要维护旧的.NET Framework项目代码,其中已经大量使用了该类;只需要非常基础的字符串增删改查功能,不需要LINQ等高级特性;需要和一个同样使用StringCollection的旧系统做对接,保持数据类型一致。除此之外的大部分场景,更推荐使用List<string>或者其他泛型集合类型。
C#StringCollection字符串集合集合操作修改时间:2026-07-01 08:33:29