IList<string> strList = new string[] { "Apple", "Mango", "Orange" };
IList<string> lst = new ReadOnlyCollection<string>(new[]{"Google",
"MSN","Yahoo"});
どちらの場合も、「Add()」メソッドを使用して新しいアイテムを追加することはできません。その後、ほとんど両方の宣言が同じですか?
IList<string> strList = new string[] { "Apple", "Mango", "Orange" };
IList<string> lst = new ReadOnlyCollection<string>(new[]{"Google",
"MSN","Yahoo"});
どちらの場合も、「Add()」メソッドを使用して新しいアイテムを追加することはできません。その後、ほとんど両方の宣言が同じですか?
最初のものでstrList[2] = "Pear";
はうまくいきます... 2番目のものではありません。配列は、追加/削除できない場合でも、インデックスで再割り当てできるという点で常に変更可能です。読み取り専用コレクションは、読み取り専用です。
の項目はstrList
変更できます (追加または削除ではなく、変更されます)。
最初の宣言では、引き続き以下を使用できます。
strList[0] = "Not a fruit";
ReadOnlyCollection<T>
IList<T>
anyを軽量オブジェクトでラップします。コレクションを変更しないすべての呼び出し ( get Count
、 get Item[]
、 ) をラップされたオブジェクトに渡しますが、コレクションを変更するすべての呼び出し ( 、、、 set )GetEnumerator
に対して例外をスローします。Add
Remove
Clear
Item[]
配列はサイズ変更できませんが、読み取り専用ではありません。この違いを理解することは重要です。そうしないと、重大なセキュリティ上の問題が発生する可能性があります。例については、Path.InvalidPathChars Fieldを参照してください。