ArrayList.IsReadOnly Property
Assembly: mscorlib (in mscorlib.dll)
A collection that is read-only does not allow the addition, removal, or modification of elements after the collection is created.
A collection that is read-only is simply a collection with a wrapper that prevents modifying the collection; therefore, if changes are made to the underlying collection, the read-only collection reflects those changes.
Retrieving the value of this property is an O(1) operation.
The following code example shows how to create a read-only wrapper around an ArrayList and how to determine if an ArrayList is read-only.
#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 Server 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
The Microsoft .NET Framework 3.0 is supported on Windows Vista, Microsoft Windows XP SP2, and Windows Server 2003 SP1.