📜  C#|为ArrayList创建一个只读包装器(1)

📅  最后修改于: 2023-12-03 15:30:17.299000             🧑  作者: Mango

C# | 为 ArrayList 创建一个只读包装器

在 C# 中,ArrayList 是一种可变长数组,可以用于存储任意类型的对象。在某些场景下,我们可能需要将 ArrayList 作为只读的集合使用,这时候我们可以为其创建一个只读包装器。

只读包装器的作用

只读包装器可以将一个可变的对象转化为只读的对象,从而避免在程序运行期间对其进行修改操作,提高程序的健壮性和安全性。

如何为 ArrayList 创建只读包装器

可以使用 C# 中的 ReadOnlyCollection 类来为 ArrayList 创建只读包装器。

具体实现方法如下:

ArrayList arrayList = new ArrayList();
ReadOnlyCollection<object> readOnlyArrayList = new ReadOnlyCollection<object>(arrayList.ToArray());

上述代码中,我们首先创建了一个 ArrayList 对象 arrayList。然后,我们使用 ArrayList 的 ToArray() 方法将其转化为 object 类型的数组,并将该数组传递给 ReadOnlyCollection 的构造函数,从而创建了一个只读的包装器。

只读包装器的使用示例

一旦我们创建了只读包装器,该对象就不支持任何修改操作。如果我们尝试向只读包装器中添加元素或删除元素,将会抛出 NotSupportedException 异常。

下面给出一个示例程序,演示如何使用只读包装器:

using System;
using System.Collections;

namespace ReadOnlyArrayListDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            ArrayList arrayList = new ArrayList() { "item1", "item2", "item3" };

            ReadOnlyCollection<object> readOnlyArrayList = new ReadOnlyCollection<object>(arrayList.ToArray());

            Console.WriteLine("Elements in the read-only ArrayList:");
            foreach (object item in readOnlyArrayList)
            {
                Console.WriteLine(item);
            }

            // Attempt to modify the read-only ArrayList.
            try
            {
                readOnlyArrayList.Add("item4");
                Console.WriteLine("Add operation successful!");
            }
            catch (NotSupportedException ex)
            {
                Console.WriteLine("Add operation failed with error message: " + ex.Message);
            }

            Console.WriteLine();
            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
    }
}

该程序首先创建了一个 ArrayList 对象,并向其中添加了三个元素。然后,它使用上面提到的方法创建了一个只读的包装器。

接着,程序使用 foreach 循环遍历了只读包装器中的所有元素,并输出每个元素的值。

最后,程序尝试向只读包装器中添加一个新的元素,由于只读包装器不支持添加操作,因此该程序会抛出 NotSupportedException 异常,并输出相应的错误信息。

程序的输出结果如下所示:

Elements in the read-only ArrayList:
item1
item2
item3
Add operation failed with error message: Collection is read-only.

Press any key to exit...
总结

在 C# 中,只读包装器可以将一个可变的对象转化为只读的对象,以提高程序的健壮性和安全性。我们可以使用 ReadOnlyCollection 类来为 ArrayList、List 和其他可变集合类型创建只读包装器。