Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All

List(Of T).AsReadOnly Method

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

Namespace:  System.Collections.Generic
Assemblies:   mscorlib (in mscorlib.dll)
  System.Collections (in System.Collections.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

XNA Framework

Supported in: 3.0, 2.0, 1.0

.NET for Windows Phone apps

Supported in: Windows Phone 8.1, Windows Phone Silverlight 8.1, Windows Phone Silverlight 8
Show:
© 2015 Microsoft