ArrayList.IsReadOnly 属性

获取一个值,该值指示 ArrayList 是否为只读。

**命名空间:**System.Collections
**程序集:**mscorlib(在 mscorlib.dll 中)

语法

声明
Public Overridable ReadOnly Property IsReadOnly As Boolean
用法
Dim instance As ArrayList
Dim value As Boolean

value = instance.IsReadOnly
public virtual bool IsReadOnly { get; }
public:
virtual property bool IsReadOnly {
    bool get ();
}
/** @property */
public boolean get_IsReadOnly ()
public function get IsReadOnly () : boolean

属性值

如果 ArrayList 为只读,则为 true;否则为 false。默认为 false

备注

只读集合在创建之后不允许添加、移除或修改元素。

只读集合只是一个具有用于防止修改的包装的集合;因此,如果更改基础集合,则只读集合将反映那些更改。

检索此属性的值的运算复杂度为 O(1)。

示例

下面的代码示例演示如何在 ArrayList 周围创建一个只读包装,以及如何确定 ArrayList 是否为只读。

Imports System
Imports System.Collections

Public Class SamplesArrayList

   Public Shared Sub Main()

      Dim myStr As [String]

      ' Creates and initializes a new ArrayList.
      Dim myAL As New ArrayList()
      myAL.Add("red")
      myAL.Add("orange")
      myAL.Add("yellow")

      ' Creates a read-only copy of the ArrayList.
      Dim myReadOnlyAL As ArrayList = ArrayList.ReadOnly(myAL)

      ' Displays whether the ArrayList is read-only or writable.
      If myAL.IsReadOnly Then
         Console.WriteLine("myAL is read-only.")
      Else
         Console.WriteLine("myAL is writable.")
      End If
      If myReadOnlyAL.IsReadOnly Then
         Console.WriteLine("myReadOnlyAL is read-only.")
      Else
         Console.WriteLine("myReadOnlyAL is writable.")
      End If

      ' Displays the contents of both collections.
      Console.WriteLine()
      Console.WriteLine("Initially,")
      Console.WriteLine("The original ArrayList myAL contains:")
      For Each myStr In  myAL
         Console.WriteLine("   {0}", myStr)
      Next myStr
      Console.WriteLine("The read-only ArrayList myReadOnlyAL contains:")
      For Each myStr In  myReadOnlyAL
         Console.WriteLine("   {0}", myStr)
      Next myStr 

      ' Adding an element to a read-only ArrayList throws an exception.
      Console.WriteLine()
      Console.WriteLine("Trying to add a new element to the read-only ArrayList:")
      Try
         myReadOnlyAL.Add("green")
      Catch myException As Exception
         Console.WriteLine(("Exception: " + myException.ToString()))
      End Try

      ' Adding an element to the original ArrayList affects the read-only ArrayList.
      myAL.Add("blue")

      ' Displays the contents of both collections again.
      Console.WriteLine()
      Console.WriteLine("After adding a new element to the original ArrayList,")
      Console.WriteLine("The original ArrayList myAL contains:")
      For Each myStr In  myAL
         Console.WriteLine("   {0}", myStr)
      Next myStr
      Console.WriteLine("The read-only ArrayList myReadOnlyAL contains:")
      For Each myStr In  myReadOnlyAL
         Console.WriteLine("   {0}", myStr)
      Next myStr 

   End Sub 'Main

End Class 'SamplesArrayList 


'This code produces the following output.
'
'myAL is writable.
'myReadOnlyAL is read-only.
'
'Initially,
'The original ArrayList myAL contains:
'   red
'   orange
'   yellow
'The read-only ArrayList myReadOnlyAL contains:
'   red
'   orange
'   yellow
'
'Trying to add a new element to the read-only ArrayList:
'Exception: System.NotSupportedException: Collection is read-only.
'   at System.Collections.ReadOnlyArrayList.Add(Object obj)
'   at SamplesArrayList.Main()
'
'After adding a new element to the original ArrayList,
'The original ArrayList myAL contains:
'   red
'   orange
'   yellow
'   blue
'The read-only ArrayList myReadOnlyAL contains:
'   red
'   orange
'   yellow
'   blue
 using System;
 using System.Collections;
 public class SamplesArrayList  {
 
    public static void Main()  {
 
       // Creates and initializes a new ArrayList.
       ArrayList myAL = new ArrayList();
       myAL.Add( "red" );
       myAL.Add( "orange" );
       myAL.Add( "yellow" );
 
       // Creates a read-only copy of the ArrayList.
       ArrayList myReadOnlyAL = ArrayList.ReadOnly( myAL );
 
       // Displays whether the ArrayList is read-only or writable.
       Console.WriteLine( "myAL is {0}.", myAL.IsReadOnly ? "read-only" : "writable" );
       Console.WriteLine( "myReadOnlyAL is {0}.", myReadOnlyAL.IsReadOnly ? "read-only" : "writable" );
 
       // Displays the contents of both collections.
       Console.WriteLine( "\nInitially," );
       Console.WriteLine( "The original ArrayList myAL contains:" );
       foreach ( String myStr in myAL )
          Console.WriteLine( "   {0}", myStr );
       Console.WriteLine( "The read-only ArrayList myReadOnlyAL contains:" );
       foreach ( String myStr in myReadOnlyAL )
          Console.WriteLine( "   {0}", myStr );

       // Adding an element to a read-only ArrayList throws an exception.
       Console.WriteLine( "\nTrying to add a new element to the read-only ArrayList:" );
       try  {
          myReadOnlyAL.Add("green");
       } catch ( Exception myException )  {
          Console.WriteLine("Exception: " + myException.ToString());
       }

       // Adding an element to the original ArrayList affects the read-only ArrayList.
       myAL.Add( "blue" );

       // Displays the contents of both collections again.
       Console.WriteLine( "\nAfter adding a new element to the original ArrayList," );
       Console.WriteLine( "The original ArrayList myAL contains:" );
       foreach ( String myStr in myAL )
          Console.WriteLine( "   {0}", myStr );
       Console.WriteLine( "The read-only ArrayList myReadOnlyAL contains:" );
       foreach ( String myStr in myReadOnlyAL )
          Console.WriteLine( "   {0}", myStr );

    }

 }


/* 
This code produces the following output.

myAL is writable.
myReadOnlyAL is read-only.

Initially,
The original ArrayList myAL contains:
   red
   orange
   yellow
The read-only ArrayList myReadOnlyAL contains:
   red
   orange
   yellow

Trying to add a new element to the read-only ArrayList:
Exception: System.NotSupportedException: Collection is read-only.
   at System.Collections.ReadOnlyArrayList.Add(Object obj)
   at SamplesArrayList.Main()

After adding a new element to the original ArrayList,
The original ArrayList myAL contains:
   red
   orange
   yellow
   blue
The read-only ArrayList myReadOnlyAL contains:
   red
   orange
   yellow
   blue

*/
#using <system.dll>

using namespace System;
using namespace System::Collections;
int main()
{
   
   // Creates and initializes a new ArrayList.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "red" );
   myAL->Add( "orange" );
   myAL->Add( "yellow" );
   
   // Creates a read-only copy of the ArrayList.
   ArrayList^ myReadOnlyAL = ArrayList::ReadOnly( myAL );
   
   // Displays whether the ArrayList is read-only or writable.
   Console::WriteLine( "myAL is {0}.", myAL->IsReadOnly ? (String^)"read-only" : "writable" );
   Console::WriteLine( "myReadOnlyAL is {0}.", myReadOnlyAL->IsReadOnly ? (String^)"read-only" : "writable" );
   
   // Displays the contents of both collections.
   Console::WriteLine( "\nInitially," );
   Console::WriteLine( "The original ArrayList myAL contains:" );
   for ( int i(0); i < myAL->Count; ++i )
      Console::WriteLine(  "   {0}", static_cast<String^>(myAL[ i ]) );
   Console::WriteLine( "The read-only ArrayList myReadOnlyAL contains:" );
   for ( int i(0); i < myReadOnlyAL->Count; ++i )
      Console::WriteLine( "   {0}", static_cast<String^>(myReadOnlyAL[ i ]) );
   
   // Adding an element to a read-only ArrayList throws an exception.
   Console::WriteLine( "\nTrying to add a new element to the read-only ArrayList:" );
   try
   {
      myReadOnlyAL->Add( "green" );
   }
   catch ( Exception^ myException ) 
   {
      Console::WriteLine( String::Concat( "Exception: ", myException->ToString() ) );
   }

   
   // Adding an element to the original ArrayList affects the read-only ArrayList.
   myAL->Add( "blue" );
   
   // Displays the contents of both collections again.
   Console::WriteLine( "\nAfter adding a new element to the original ArrayList," );
   Console::WriteLine( "The original ArrayList myAL contains:" );
   for ( int i(0); i < myAL->Count; ++i )
      Console::WriteLine( "   {0}", static_cast<String^>(myAL[ i ]) );
   Console::WriteLine( "The read-only ArrayList myReadOnlyAL contains:" );
   for ( int i(0); i < myReadOnlyAL->Count; ++i )
      Console::WriteLine( "   {0}", static_cast<String^>(myReadOnlyAL[ i ]) );
}

/*
This code produces the following output.

myAL is writable.
myReadOnlyAL is read-only.

Initially,
The original ArrayList myAL contains:
   red
   orange
   yellow
The read-only ArrayList myReadOnlyAL contains:
   red
   orange
   yellow

Trying to add a new element to the read-only ArrayList:
Exception: System.NotSupportedException: Collection is read-only.
   at System.Collections.ReadOnlyArrayList.Add(Object obj)
   at SamplesArrayList.Main()

After adding a new element to the original ArrayList,
The original ArrayList myAL contains:
   red
   orange
   yellow
   blue
The read-only ArrayList myReadOnlyAL contains:
   red
   orange
   yellow
   blue

*/
import System.*;
import System.Collections.*;

public class SamplesArrayList
{
    public static void main(String[] args)
    {
        // Creates and initializes a new ArrayList.
        ArrayList myAL = new ArrayList();

        myAL.Add("red");
        myAL.Add("orange");
        myAL.Add("yellow");

        // Creates a read-only copy of the ArrayList.
        ArrayList myReadOnlyAL = ArrayList.ReadOnly(myAL);

        // Displays whether the ArrayList is read-only or writable.
        Console.WriteLine("myAL is {0}.", myAL.get_IsReadOnly()
            ? "read-only" : "writable");
        Console.WriteLine("myReadOnlyAL is {0}.",myReadOnlyAL.get_IsReadOnly()
            ? "read-only" : "writable");

        // Displays the contents of both collections.
        Console.WriteLine("\nInitially,");
        Console.WriteLine("The original ArrayList myAL contains:");
        for (int iCtr = 0; iCtr < myAL.get_Count(); iCtr++) {
            String myStr = myAL.get_Item(iCtr).ToString();
            Console.WriteLine("   {0}", myStr);
        }
        Console.WriteLine("The read-only ArrayList myReadOnlyAL contains:");
        for (int iCtr = 0; iCtr < myReadOnlyAL.get_Count(); iCtr++) {
            String myStr = myReadOnlyAL.get_Item(iCtr).ToString();
            Console.WriteLine("   {0}", myStr);
        }

        // Adding an element to a read-only ArrayList throws an exception.
        Console.WriteLine("\nTrying to add a new element to the read-only"
            + " ArrayList:");
        try {
            myReadOnlyAL.Add("green");
        }
        catch (System.Exception myException) {
            Console.WriteLine("Exception: " + myException.ToString());
        }

        // Adding an element to the original ArrayList affects the 
        // read-only ArrayList.
        myAL.Add("blue");

        // Displays the contents of both collections again.
        Console.WriteLine("\nAfter adding a new element "
            + "to the original ArrayList,");
        Console.WriteLine("The original ArrayList myAL contains:");
        for (int iCtr = 0; iCtr < myAL.get_Count(); iCtr++) {
            String myStr = myAL.get_Item(iCtr).ToString();
            Console.WriteLine("   {0}", myStr);
        }
        Console.WriteLine("The read-only ArrayList myReadOnlyAL contains:");
        for (int iCtr = 0; iCtr < myReadOnlyAL.get_Count(); iCtr++) {
            String myStr = myReadOnlyAL.get_Item(iCtr).ToString();
            Console.WriteLine("   {0}", myStr);
        }
    } //main 
} //SamplesArrayList

/* 
This code produces the following output.

myAL is writable.
myReadOnlyAL is read-only.

Initially,
The original ArrayList myAL contains:
   red
   orange
   yellow
The read-only ArrayList myReadOnlyAL contains:
   red
   orange
   yellow

Trying to add a new element to the read-only ArrayList:
Exception: System.NotSupportedException: Collection is read-only.
   at System.Collections.ReadOnlyArrayList.Add(Object obj)
   at SamplesArrayList.main(String[] args)

After adding a new element to the original ArrayList,
The original ArrayList myAL contains:
   red
   orange
   yellow
   blue
The read-only ArrayList myReadOnlyAL contains:
   red
   orange
   yellow
   blue

*/

平台

Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Mobile for Smartphone、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

.NET Compact Framework

受以下版本支持:2.0、1.0

请参见

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间
ReadOnly