C#のArray.AsReadOnly(T[])メソッドとは?読み取り専用コレクションの作成方法を解説
C#のArray.AsReadOnly(T[])メソッドは、指定した配列に対する読み取り専用のラッパーを返します。戻り値はReadOnlyCollection<T>型であり、このラッパーを通じて配列の要素を変更しようとすると例外がスローされます。
構文
public static System.Collections.ObjectModel.ReadOnlyCollection<T> AsReadOnly<T> (T[] array);
ここで、Tは配列の要素の型を表し、arrayはインデックスが0から始まる1次元配列です。
押さえておきたいポイント
- 元の配列そのものは変更可能なままです。読み取り専用として振る舞うのは、ラッパー経由でのアクセスの場合のみです。
- ラッパー経由で要素の追加・変更・削除を行おうとすると、NotSupportedExceptionが発生します。
- 不変性を保証したいデータを外部に公開する際に、意図しない変更を防ぐ手段として有効です。
使用例
以下は、Array.AsReadOnly(T[])メソッドを使ったサンプルコードです。読み取り専用のIListを作成し、要素の変更を試みた際の動作を確認できます。
using System;
using System.Collections.Generic;
public class Demo {
public static void Main() {
String[] arr = { "John", "Tom", "Katie", "Brad" };
// 読み取り専用のIListラッパーを作成
IList<String> list = Array.AsReadOnly( arr );
// 読み取り専用IListの値を表示
Console.WriteLine( "初期の読み取り専用IList..." );
display( list );
// 読み取り専用ラッパーへの変更を試みる
try {
list[0] = "Kevin";
list[1] = "Bradley";
}
catch ( NotSupportedException e ) {
Console.WriteLine(e.GetType());
Console.WriteLine(e.Message);
Console.WriteLine();
}
Console.WriteLine( "2つの要素を変更しようとしましたが、読み取り専用のためIListは変化しません..." );
display( list );
}
public static void display( IList<String> list ) {
for ( int i = 0; i < list.Count; i++ ) {
Console.WriteLine(list[i]);
}
Console.WriteLine();
}
}
実行結果
上記のコードを実行すると、次のような出力が得られます。
初期の読み取り専用IList...
John
Tom
Katie
Brad
System.NotSupportedException
Collection is read-only.
2つの要素を変更しようとしましたが、読み取り専用のためIListは変化しません...
John
Tom
Katie
Brad
出力を見ると、list[0]とlist[1]への代入を試みた時点でNotSupportedException(「Collection is read-only.」=コレクションは読み取り専用です)がスローされ、catchブロックで捕捉されていることがわかります。そのため、変更後もIListの内容は元のまま維持されています。
まとめ
Array.AsReadOnly(T[])メソッドを使用すれば、既存の配列を読み取り専用のコレクションとして安全に公開できます。誤ってデータが書き換えられるのを防ぎたい場面で非常に便利です。ただし、元の配列への参照が他にも残っている場合は、そちら経由では変更が可能である点に注意してください。
-
【初心者向け】JavaScriptのArray.from()メソッドの使い方を実例で解説
JavaScript の Array.from() メソッドは、length プロパティを持つオブジェクト(配列風オブジェクト)や、文字列・Map・Set などの反復可能(イテラブル)なオブジェクトから、新しい Array オブジェクトを生成して返すためのメソッドです。元のオブジェクトは変更されず、常に新しい配列インスタンスが返されます。 基本構文 Array.from(obj, mapFunction, val) パラメータの説明 obj:配列へ変換したい対象のオブジェクト。配列風オブジェクト(length プロパティを持つもの)や反復可能なオブジェクトを指定します。 mapFunctio
-
JavaScriptのArray.join()メソッドとは?配列を文字列に結合する使い方を解説
Array.join()メソッドとは JavaScriptのArray.join()メソッドは、配列内のすべての要素を指定した区切り文字で連結し、ひとつの文字列として返すメソッドです。配列をカンマ区切りのテキストに変換したい場合や、独自の区切り文字を使ってデータを整形したい場合などに活用できます。 基本構文 array.join(separator) separatorには、要素同士をつなぐ区切り文字を指定します。引数を省略した場合は、デフォルトでカンマ(,)が使用されます。 押さえておきたいポイント 引数を省略すると、カンマ区切りの文字列が返される 元の配列は変更されない(非破壊的なメ