当前位置: 首页 > news >正文

C# 非泛型集合基础:ArrayList与Hashtable的使用与注意事项

在C#中,ArrayListHashtable 是两个非泛型的集合类,它们在.NET Framework的早期版本中广泛使用,但在现代C#开发中,由于泛型集合(如 List<T>Dictionary<TKey, TValue>)提供了更好的类型安全性和性能,因此非泛型集合的使用已经逐渐减少。不过,了解它们的基本用法仍然是有益的,特别是在维护旧代码或进行特定类型的操作时。

ArrayList

ArrayList 是一个可以动态调整大小的数组,用于存储任意类型的对象。不过,由于它不提供类型安全,所以在添加或检索元素时需要进行类型转换。

示例:使用ArrayList
using System;
using System.Collections;class Program
{static void Main(){ArrayList myAL = new ArrayList();// 添加元素myAL.Add("Hello");myAL.Add(1);myAL.Add(true);// 访问元素(需要类型转换)string item1 = (string)myAL[0];int item2 = (int)myAL[1];bool item3 = (bool)myAL[2];Console.WriteLine(item1);Console.WriteLine(item2);Console.WriteLine(item3);// 遍历ArrayListforeach (object item in myAL){Console.WriteLine(item);}}
}

Hashtable

Hashtable 是一个存储键值对的集合,类似于字典,但它不是泛型的。与 ArrayList 类似,Hashtable 也提供了动态数组的功能,但它允许你通过键(而不是索引)来访问集合中的元素。由于 Hashtable 不是泛型的,所以键和值都是 object 类型,这同样要求你在使用时进行类型转换。

示例:使用Hashtable
using System;
using System.Collections;class Program
{static void Main(){Hashtable myHT = new Hashtable();// 添加键值对myHT.Add("key1", "value1");myHT.Add("key2", 2);// 访问元素(需要类型转换)string value1 = (string)myHT["key1"];int value2 = (int)myHT["key2"];Console.WriteLine(value1);Console.WriteLine(value2);// 遍历Hashtableforeach (DictionaryEntry de in myHT){Console.WriteLine($"Key = {de.Key}, Value = {de.Value}");}}
}

注意事项

  • 由于 ArrayListHashtable 不提供类型安全,所以在添加或检索元素时需要进行显式类型转换,这可能会引发 InvalidCastException
  • 泛型集合(如 List<T>Dictionary<TKey, TValue>)提供了更好的类型安全性和性能,因此在可能的情况下应优先使用它们。
  • 在处理大型数据集或需要高性能的场景中,泛型集合通常比非泛型集合表现更好。

http://www.mrgr.cn/news/44021.html

相关文章:

  • c#代码介绍23种设计模式_19状态者模式
  • Vue入门-Vue中实例和java中类的相同和不同
  • 阿里云百炼通义大模型接入流程,手把手教程
  • Python中的数据可视化:从入门到进阶
  • Hive数仓操作(十六)
  • 【Spring】“请求“ 之传递单个参数、传递多个参数和传递对象
  • 打造自己的RAG解析大模型:Windows部署OCR服务(可商业应用)
  • Rust 快速入门(一)
  • Python知识点:在Python环境中,如何使用Transformers进行预训练语言模型应用
  • Ubuntu24.04编译安装LinuxZen6.11.2
  • C语言动态内存管理(26)
  • 【C++】STL——list的模拟实现
  • RIFE: Real-Time Intermediate Flow Estimation for Video Frame Interpolation
  • CSP-J 复赛真题 P9749 [CSP-J 2023] 公路
  • JavaScript中的数组改变原数组的方法
  • 数据结构之红黑树实现(全)
  • YOLOv10改进,YOLOv10添加CA注意力机制,二次创新C2f结构,助力涨点
  • 【并发】ThreadLocalMap 解决 Hash 冲突的实现方式
  • Golang 进阶1 —— 面向对象
  • 简单认识 redis -3 -其他命令