自学内容网 自学内容网

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>)提供了更好的类型安全性和性能,因此在可能的情况下应优先使用它们。
  • 在处理大型数据集或需要高性能的场景中,泛型集合通常比非泛型集合表现更好。

原文地址:https://blog.csdn.net/x1234w4321/article/details/142180677

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!