Array.AsReadOnlyメソッドは読み取り専用のラッパーを作成するだけであり、元となった配列が読み取り専用となるのではないため、元の配列に対しては依然として値を設定することが可能です。 元の配列を変更すると、作成したReadOnlyCollectionにもその変更が反映されます。
Array.AsReadOnlyメソッドで読み取り専用化した配列のオリジナルに対して変更を加えた場合
using System;
using System.Collections.ObjectModel;
class Sample {
static void Main()
{
int[] source = {0, 1, 2, 3, 4};
// 配列を読み取り専用にする
var arr = Array.AsReadOnly(source);
// 元になった配列に変更を加える
source[0] = 5;
// 読み取り専用コレクションの要素を列挙
for (var i = 0; i < arr.Count; i++) {
Console.Write("{0}, ", arr[i]);
}
Console.WriteLine();
}
}
実行結果
5, 1, 2, 3, 4,