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

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);

        // 遍历ArrayList
        foreach (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);

        // 遍历Hashtable
        foreach (DictionaryEntry de in myHT)
        {
            Console.WriteLine($"Key = {de.Key}, Value = {de.Value}");
        }
    }
}

注意事项

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

http://www.kler.cn/news/335312.html

相关文章:

  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-02
  • 小程序原生-利用setData()对不同类型的数据进行增删改
  • Oracle 数据库安装及配置
  • 通信工程学习:什么是RIP路由信息协议
  • SQLServer CXPACKET等待事件
  • spark-sql建表数据同步到hive
  • 【LeetCode】每日一题 2024_10_2 准时到达的列车最小时速(二分答案)
  • “衣依”服装销售平台开发:Spring Boot实战指南
  • LeetCode讲解篇之239. 滑动窗口最大值
  • 数据结构与算法篇(树 - 常见术语)
  • Debezium系列之:Debezium 3.0.0.Final发布
  • M3u8视频由手机拷贝到电脑之后,通过potplayer播放报错找不到文件地址怎么解决?
  • 强化学习——基本概念
  • 傅里叶分析之掐死教程(完整版)更新于2014.06.06
  • Docker安装人大金仓(kingbase)关系型数据库教程
  • 通过URL与数据库交互(十三)
  • 教你快速成为洛谷红名大佬!2分钟学会,2个月成功!
  • MVVM 架构模式:解耦、可测试与高效
  • 【深度强化学习】DDPG实现的4个细节(OUNoise等)
  • 【Python】Hypercorn:轻量级的异步ASGI/WSGI服务器