在.NET FCL为我们提供了很多集合类型,是编程中非常有力的工具。泛型集合主要在 System.Collections.Generic名称空间中,而非泛型集合主要在System.Collections,首先抛出 结论:如果在C#2.0版本以上,尽量使用泛型集合类,而不使用非泛型集合类。因为,1. 泛型编程是从c#2.0开始才被.net支持的。2.泛型集合在性能和类型安全方面优于非泛型集 合。 。。。。 ### C# 泛型集合与非泛型集合详解 #### 一、概述 在.NET Framework Class Library (FCL) 中,提供了丰富的集合类型,这些集合类型是编程中不可或缺的工具。根据是否支持泛型特性,这些集合大致可以分为两类:泛型集合和非泛型集合。本文将详细探讨这两类集合的特点、优缺点,并通过具体示例来说明为什么在C# 2.0及以上版本中,推荐使用泛型集合。 #### 二、非泛型集合简介 非泛型集合主要位于 `System.Collections` 命名空间中,包括但不限于 `ArrayList`, `Hashtable`, `Queue`, `SortedList`, `Stack` 等。这些集合在设计之初并未考虑到类型安全性的问题,因此它们只能存储 `object` 类型的对象,这导致了以下问题: 1. **性能问题**:由于非泛型集合存储的是 `object` 类型,这意味着当向集合中添加基本类型(如 `int`)时,这些类型会被装箱为引用类型。而在取出时,又需要进行拆箱操作。装箱和拆箱过程中会产生额外的内存分配和数据移动,从而影响程序的执行效率。 - **装箱**:将值类型转换为引用类型的过程,通常发生在向非泛型集合中添加值类型对象时。 - **拆箱**:将引用类型转换回值类型的过程,通常发生在从非泛型集合中获取值类型对象时。 2. **类型安全问题**:非泛型集合允许存储任何类型的对象,这可能导致运行时错误。例如,在编译时不会发现类型不匹配的问题,但在运行时尝试将一个非整数类型的对象转换为整数时,可能会引发异常。 #### 三、泛型集合介绍 泛型集合位于 `System.Collections.Generic` 命名空间中,其中包含了如 `List<T>`, `LinkedList<T>`, `Queue<T>`, `Stack<T>` 等类型。泛型集合相比非泛型集合具有以下优势: 1. **类型安全**:泛型集合在编译阶段就能确保集合中只包含指定类型的元素。这种类型检查避免了运行时可能出现的类型转换错误。 2. **性能优化**:泛型集合避免了装箱和拆箱操作,直接操作值类型,从而提高了程序的执行效率。 #### 四、案例分析 为了更好地理解泛型集合与非泛型集合之间的差异,我们来看一个具体的例子。假设我们需要创建一个集合来存储整数。 ##### 非泛型集合示例 ```csharp ArrayList numbers = new ArrayList(); numbers.Add(22); numbers.Add(35); int number = (int)numbers[1]; Console.WriteLine(number); ``` 在这个例子中,整数 `22` 和 `35` 被装箱为 `object` 类型的对象存储在 `ArrayList` 中。当从集合中取出数据时,需要进行拆箱操作将其转换回 `int` 类型。这个过程不仅增加了程序的复杂性,还可能导致性能下降。 ##### 泛型集合示例 ```csharp List<int> numbers = new List<int>(); numbers.Add(22); numbers.Add(35); int number = numbers[1]; Console.WriteLine(number); ``` 在这个示例中,我们使用了泛型集合 `List<int>` 来存储整数。这样既避免了装箱和拆箱的操作,也确保了集合中的元素类型一致性,提高了程序的类型安全性和性能。 #### 五、总结 泛型集合相较于非泛型集合具有明显的优点,尤其是在类型安全性和性能方面。因此,在C# 2.0 及其后续版本中,强烈建议开发者优先使用泛型集合。这不仅可以提高代码的质量和可维护性,还能有效提升应用程序的性能。在实际开发过程中,合理选择合适的集合类型对构建高效稳定的应用系统至关重要。






























- 粉丝: 4
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 基于PLC技术龙门式精密油压机电气设计方案探讨.doc
- (源码)基于Win32 API的试制小游戏.zip
- 互联网+背景下高中学生历史学科核心素养的培养初探.docx
- 网络存储产品在NVR系统中的应用-公共场所其他.docx
- 计算机维修电脑部件组成实训报告.doc
- (源码)基于KiCad和ESP32S3的心电图模拟数字转换系统.zip
- 使用纯 Python 编写机器学习算法的实现指南与示例
- 信息化校园建设.ppt
- 四层电梯的PLC控制.doc
- (源码)基于Pygame的推箱子游戏(Sokoban).zip
- 《flash8动画设计实例教程》第五章.ppt
- 软件开发项目初步验收专业技术方案.doc
- 工程项目管理2011年7月自考复习资料.doc
- (源码)基于lnArduino框架的红点焊接机控制板.zip
- XX年国家网络安全宣传周活动实施方案.docx
- (源码)基于Python和TensorFlow的以图搜图系统.zip


