Array.AsReadOnly<T>(T[]) 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
지정한 배열의 읽기 전용 래퍼를 반환합니다.
public:
generic <typename T>
static System::Collections::ObjectModel::ReadOnlyCollection<T> ^ AsReadOnly(cli::array <T> ^ array);
public static System.Collections.ObjectModel.ReadOnlyCollection<T> AsReadOnly<T> (T[] array);
static member AsReadOnly : 'T[] -> System.Collections.ObjectModel.ReadOnlyCollection<'T>
Public Shared Function AsReadOnly(Of T) (array As T()) As ReadOnlyCollection(Of T)
형식 매개 변수
- T
배열 요소의 형식입니다.
매개 변수
- array
- T[]
읽기 전용 ReadOnlyCollection<T> 래퍼에서 래핑할 1차원 배열(0부터 시작)입니다.
반환
지정한 배열의 읽기 전용 ReadOnlyCollection<T> 래퍼입니다.
예외
array
이(가) null
인 경우
예제
다음 예제에서는 배열을 읽기 전용 ReadOnlyCollection<T>으로 래핑합니다.
using namespace System;
using namespace System::Collections::Generic;
namespace Samples
{
public ref class SamplesArray
{
public:
static void Work()
{
// Create and initialize a new string array.
array <String^>^ textArray =
{"The", "quick", "brown", "fox"};
// Display the values of the array.
Console::WriteLine("The string array initially contains "
"the following values:");
PrintIndexAndValues(textArray);
// Create a read-only IList wrapper around the array.
IList <String^>^ textList = Array::AsReadOnly(textArray);
// Display the values of the read-only IList.
Console::WriteLine("The read-only IList contains "
"the following values:");
PrintIndexAndValues(textList);
// Attempt to change a value through the wrapper.
try
{
textList[3] = "CAT";
}
catch (NotSupportedException^ ex)
{
Console::WriteLine("{0} - {1}", ex->GetType(),
ex->Message);
Console::WriteLine();
}
// Change a value in the original array.
textArray[2] = "RED";
// Display the values of the array.
Console::WriteLine("After changing the third element,"
"the string array contains the following values:");
PrintIndexAndValues(textArray);
// Display the values of the read-only IList.
Console::WriteLine("After changing the third element, the"
" read-only IList contains the following values:");
PrintIndexAndValues(textList);
}
static void PrintIndexAndValues(array<String^>^ textArray)
{
for (int i = 0; i < textArray->Length; i++)
{
Console::WriteLine(" [{0}] : {1}", i, textArray[i]);
}
Console::WriteLine();
}
static void PrintIndexAndValues(IList<String^>^ textList)
{
for (int i = 0; i < textList->Count; i++)
{
Console::WriteLine(" [{0}] : {1}", i, textList[i]);
}
Console::WriteLine();
}
};
}
int main()
{
Samples::SamplesArray::Work();
}
/*
This code produces the following output.
The string array initially contains the following values:
[0] : The
[1] : quick
[2] : brown
[3] : fox
The read-only IList contains the following values:
[0] : The
[1] : quick
[2] : brown
[3] : fox
System.NotSupportedException - Collection is read-only.
After changing the third element, the string array contains the following values:
[0] : The
[1] : quick
[2] : RED
[3] : fox
After changing the third element, the read-only IList contains the following values:
[0] : The
[1] : quick
[2] : RED
[3] : fox
*/
using System;
using System.Collections.Generic;
public class SamplesArray {
public static void Main() {
// Create and initialize a new string array.
String[] myArr = { "The", "quick", "brown", "fox" };
// Display the values of the array.
Console.WriteLine( "The string array initially contains the following values:" );
PrintIndexAndValues( myArr );
// Create a read-only IList wrapper around the array.
IList<string> myList = Array.AsReadOnly( myArr );
// Display the values of the read-only IList.
Console.WriteLine( "The read-only IList contains the following values:" );
PrintIndexAndValues( myList );
// Attempt to change a value through the wrapper.
try {
myList[3] = "CAT";
}
catch ( NotSupportedException e ) {
Console.WriteLine( "{0} - {1}", e.GetType(), e.Message );
Console.WriteLine();
}
// Change a value in the original array.
myArr[2] = "RED";
// Display the values of the array.
Console.WriteLine( "After changing the third element, the string array contains the following values:" );
PrintIndexAndValues( myArr );
// Display the values of the read-only IList.
Console.WriteLine( "After changing the third element, the read-only IList contains the following values:" );
PrintIndexAndValues( myList );
}
public static void PrintIndexAndValues( String[] myArr ) {
for ( int i = 0; i < myArr.Length; i++ ) {
Console.WriteLine( " [{0}] : {1}", i, myArr[i] );
}
Console.WriteLine();
}
public static void PrintIndexAndValues( IList<string> myList ) {
for ( int i = 0; i < myList.Count; i++ ) {
Console.WriteLine( " [{0}] : {1}", i, myList[i] );
}
Console.WriteLine();
}
}
/*
This code produces the following output.
The string array initially contains the following values:
[0] : The
[1] : quick
[2] : brown
[3] : fox
The read-only IList contains the following values:
[0] : The
[1] : quick
[2] : brown
[3] : fox
System.NotSupportedException - Collection is read-only.
After changing the third element, the string array contains the following values:
[0] : The
[1] : quick
[2] : RED
[3] : fox
After changing the third element, the read-only IList contains the following values:
[0] : The
[1] : quick
[2] : RED
[3] : fox
*/
open System
open System.Collections.Generic
let printIndexAndValues (myList: IList<'a>) =
for i = 0 to myList.Count - 1 do
printfn $" [{i}] : {myList[i]}"
printfn ""
// Create and initialize a new string array.
let myArr = [| "The"; "quick"; "brown"; "fox" |]
// Display the values of the array.
printfn "The string array initially contains the following values:"
printIndexAndValues myArr
// Create a read-only IList wrapper around the array.
let myList: IList<_> = Array.AsReadOnly myArr
// Display the values of the read-only IList.
printfn "The read-only IList contains the following values:"
printIndexAndValues myList
// Attempt to change a value through the wrapper.
try
myList[3] <- "CAT"
with :? NotSupportedException as e ->
printfn $"{e.GetType()} - {e.Message}\n"
// Change a value in the original array.
myArr[2] <- "RED"
// Display the values of the array.
printfn "After changing the third element, the string array contains the following values:"
printIndexAndValues myArr
// Display the values of the read-only IList.
printfn "After changing the third element, the read-only IList contains the following values:"
printIndexAndValues myList
// This code produces the following output.
// The string array initially contains the following values:
// [0] : The
// [1] : quick
// [2] : brown
// [3] : fox
//
// The read-only IList contains the following values:
// [0] : The
// [1] : quick
// [2] : brown
// [3] : fox
//
// System.NotSupportedException - Collection is read-only.
//
// After changing the third element, the string array contains the following values:
// [0] : The
// [1] : quick
// [2] : RED
// [3] : fox
//
// After changing the third element, the read-only IList contains the following values:
// [0] : The
// [1] : quick
// [2] : RED
// [3] : fox
Imports System.Collections.Generic
Public Class SamplesArray
Public Shared Sub Main()
' Create and initialize a new string array.
Dim myArr As String() = {"The", "quick", "brown", "fox"}
' Display the values of the array.
Console.WriteLine("The string array initially contains the following values:")
PrintIndexAndValues(myArr)
' Create a read-only IList wrapper around the array.
Dim myList As IList(Of String) = Array.AsReadOnly(myArr) '
' Display the values of the read-only IList.
Console.WriteLine("The read-only IList contains the following values:")
PrintIndexAndValues(myList)
' Attempt to change a value through the wrapper.
Try
myList(3) = "CAT"
Catch e As NotSupportedException
Console.WriteLine("{0} - {1}", e.GetType(), e.Message)
Console.WriteLine()
End Try
' Change a value in the original array.
myArr(2) = "RED"
' Display the values of the array.
Console.WriteLine("After changing the third element, the string array contains the following values:")
PrintIndexAndValues(myArr)
' Display the values of the read-only IList.
Console.WriteLine("After changing the third element, the read-only IList contains the following values:")
PrintIndexAndValues(myList)
End Sub
Overloads Public Shared Sub PrintIndexAndValues(myArr() As String)
Dim i As Integer
For i = 0 To myArr.Length - 1
Console.WriteLine(" [{0}] : {1}", i, myArr(i))
Next i
Console.WriteLine()
End Sub
Overloads Public Shared Sub PrintIndexAndValues(myList As IList(Of String))
Dim i As Integer
For i = 0 To myList.Count - 1
Console.WriteLine(" [{0}] : {1}", i, myList(i))
Next i
Console.WriteLine()
End Sub
End Class
'This code produces the following output.
'
'The string array initially contains the following values:
' [0] : The
' [1] : quick
' [2] : brown
' [3] : fox
'
'The read-only IList contains the following values:
' [0] : The
' [1] : quick
' [2] : brown
' [3] : fox
'
'System.NotSupportedException - Collection is read-only.
'
'After changing the third element, the string array contains the following values:
' [0] : The
' [1] : quick
' [2] : RED
' [3] : fox
'
'After changing the third element, the read-only IList contains the following values:
' [0] : The
' [1] : quick
' [2] : RED
' [3] : fox
설명
배열을 수정하지 않도록 하려면 이 래퍼를 통해서만 배열을 노출합니다.
읽기 전용인 컬렉션은 단순히 컬렉션을 수정할 수 없는 래퍼가 있는 컬렉션입니다. 따라서 기본 컬렉션을 변경하면 읽기 전용 컬렉션에 해당 변경 내용이 반영됩니다.
이 방법은 O(1) 작업에 설명 합니다.