C# ArrayList - ReadOnly() 方法

C# ArrayList ReadOnly() 方法用于为现有 ArrayList 创建只读包装器。

此方法通过确保元素无法添加、删除或修改,使 ArrayList 不可变。此方法的复杂度为 O(n)。

语法

以下是 C# ArrayList ReadOnly() 方法的语法 -

public static ArrayList ReadOnly (ArrayList list);

参数

此方法接受一个需要包装为只读的 ArrayList。

返回值

此方法返回一个只读的 ArrayList 包装器,以防止修改。

示例 1:演示 ReadOnly() 方法的使用

以下是 ReadOnly() 方法的基本示例,用于演示如何使用它 -

using System;
using System.Collections;
class Example {
   public static void Main() {
      // 创建并初始化新的 ArrayList
      ArrayList mylist = new ArrayList {1, 2, 3, 4, 5};
   
     // 创建只读包装器
   
      ArrayList readonlList = ArrayList.ReadOnly(mylist);
   
      // 显示元素
      Console.WriteLine("Read Only List: ");
      foreach(var items in readonlList)
         Console.Write(items + " ");
   }
}

输出

以下是输出 -

Read Only List:
1 2 3 4 5

示例 2:在 C# 中修改只读 ArrayList

在此示例中,我们创建一个 ArrayList。然后使用 ReadOnly() 方法将其包装为只读。之后,我们尝试进行修改 -

using System;
using System.Collections;
class Example {
   public static void Main() {
      // 创建并初始化新的 ArrayList
      ArrayList mylist = new ArrayList {1, 2, 3, 4, 5};
      
      // 创建只读包装器
      ArrayList readonlList = ArrayList.ReadOnly(mylist);
      
      // 显示元素
      Console.WriteLine("Read Only List: ");
      foreach(var items in readonlList)
         Console.Write(items + " ");
         
      Console.Write("");
         
      // Trying to modify the read-only list
      try
      {
         readonlList.Add(6);
      }
      catch (NotSupportedException e)
      {
         Console.WriteLine("Exception: " + e.Message);
      }
   }
}

输出

以下是输出 -

Read Only List: 
1 2 3 4 5 
Exception: Collection is read-only.

示例 3:在 C# 中更新只读 ArrayList

在此示例中,我们创建一个 ArrayList。然后使用 ReadOnly() 方法将其包装为只读。之后,我们尝试更新 ArrayList 中的元素 -

using System;
using System.Collections;
class Example {
   public static void Main() {   
      // 创建并初始化新的 ArrayList
      ArrayList mylist = new ArrayList {1, 2, 3, 4, 5};
   
      // 创建只读包装器
      ArrayList readonlList = ArrayList.ReadOnly(mylist);
   
      // 显示元素
      Console.WriteLine("Read Only List: ");
      foreach(var items in readonlList){
        Console.Write(items + " ");
      }
      Console.Write("");
      try
      {
         readonlList[2] = 10;
      }
      catch (NotSupportedException e)
      {
         Console.WriteLine("Exception: " + e.Message);
      }
   }
}

输出

以下是输出 -

Read Only List: 
1 2 3 4 5 
Exception: Collection is read-only.

示例 4:列表中具有动态更新的只读包装器

此示例演示了只读 ArrayList 不允许修改;但是,对原始 ArrayList 所做的任何更改仍会反映在只读版本中 -

using System;
using System.Collections;

class Example {
   static void Main() {

      ArrayList list = new ArrayList() {
         "Apple",
         "Banana",
         "Cherry"
      };

      ArrayList readOnlyList = ArrayList.ReadOnly(list);

      Console.WriteLine("Read-Only List:");
      foreach(var item in readOnlyList) {
         Console.Write(item + " ");
      }
      Console.WriteLine();

      // 尝试修改只读列表
      try {
         readOnlyList.Add("Mango");
      } catch (NotSupportedException e) {
         Console.WriteLine("Exception: " + e.Message);
      }

      // 修改原始列表
      // 允许,因为 myList 不是只读的
      list.Add("Mango");

      Console.WriteLine("Updated Original List:");
      foreach(var item in list) {
         Console.Write(item + " ");
      }
      Console.WriteLine();

      Console.WriteLine("Updated Read-Only List (Reflects changes in original):");
      foreach(var item in readOnlyList) {
         Console.Write(item + " ");
      }
   }
}

输出

以下是输出 -

Read-Only List:
Apple Banana Cherry 
Exception: Collection is read-only.
Updated Original List:
Apple Banana Cherry Mango 
Updated Read-Only List (Reflects changes in original):
Apple Banana Cherry Mango