List(Of T).AsReadOnly Method

Returns a read-only IList(Of T) wrapper for the current collection.

Namespace:  System.Collections.Generic
Assembly:  mscorlib (in mscorlib.dll)

'Declaration
Public Function AsReadOnly As ReadOnlyCollection(Of T)

Return Value

Type: System.Collections.ObjectModel.ReadOnlyCollection(Of T)
A ReadOnlyCollection(Of T) that acts as a read-only wrapper around the current List(Of T).

To prevent any modifications to List(Of T), expose List(Of T) only through this wrapper. A ReadOnlyCollection(Of T) does not expose methods that modify the collection. However, if changes are made to the underlying List(Of T), the read-only collection reflects those changes.

This method is an O(1) operation.

The following example demonstrates the AsReadOnly method. A List(Of T) of strings with a capacity of 4 is created, because the ultimate size of the list is known to be exactly 4. The list is populated with four strings, and the AsReadOnly method is used to get a read-only IList(Of T) generic interface implementation that wraps the original list.

An element of the original list is set to "Coelophysis" using the Item property (the indexer in C#), and the contents of the read-only list are displayed again to demonstrate that it is just a wrapper for the original list.

Imports System
Imports System.Collections.Generic

Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs As New List(Of String)(4)

        Console.WriteLine(vbLf & "Capacity: {0}", dinosaurs.Capacity)

        dinosaurs.Add("Tyrannosaurus")
        dinosaurs.Add("Amargasaurus")
        dinosaurs.Add("Mamenchisaurus")
        dinosaurs.Add("Deinonychus")

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & _
            "Dim roDinosaurs As IList(Of String) = dinosaurs.AsReadOnly")
        Dim roDinosaurs As IList(Of String) = dinosaurs.AsReadOnly

        Console.WriteLine(vbLf & "Elements in the read-only IList:")
        For Each dinosaur As String In roDinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & "dinosaurs(2) = ""Coelophysis""")
        dinosaurs(2) = "Coelophysis"

        Console.WriteLine(vbLf & "Elements in the read-only IList:")
        For Each dinosaur As String In roDinosaurs
            Console.WriteLine(dinosaur)
        Next 

    End Sub 
End Class 

' This code example produces the following output: 

'Capacity: 4 

'Tyrannosaurus 
'Amargasaurus 
'Mamenchisaurus 
'Deinonychus 

'Dim roDinosaurs As IList(Of String) = dinosaurs.AsReadOnly 

'Elements in the read-only IList: 
'Tyrannosaurus 
'Amargasaurus 
'Mamenchisaurus 
'Deinonychus 

'dinosaurs(2) = "Coelophysis" 

'Elements in the read-only IList: 
'Tyrannosaurus 
'Amargasaurus 
'Coelophysis 
'Deinonychus

.NET Framework

Supported in: 4.6, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Supported in: Windows Phone 8.1

Supported in: Windows Phone Silverlight 8.1

Supported in: Windows Phone Silverlight 8

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Was this page helpful?
(1500 characters remaining)
Thank you for your feedback
Show:
© 2014 Microsoft