1
IList<string> strList = new string[] { "Apple", "Mango", "Orange" };

IList<string> lst = new ReadOnlyCollection<string>(new[]{"Google",
"MSN","Yahoo"});

どちらの場合も、「Add()」メソッドを使用して新しいアイテムを追加することはできません。その後、ほとんど両方の宣言が同じですか?

4

3 に答える 3

3

最初のものでstrList[2] = "Pear";はうまくいきます... 2番目のものではありません。配列は、追加/削除できない場合でも、インデックスで再割り当てできるという点で常に変更可能です。読み取り専用コレクションは、読み取り専用です。

于 2009-10-26T16:44:20.823 に答える
3

の項目はstrList変更できます (追加または削除ではなく、変更されます)。

于 2009-10-26T16:44:39.590 に答える
2

最初の宣言では、引き続き以下を使用できます。

strList[0] = "Not a fruit";

ReadOnlyCollection<T>IList<T>anyを軽量オブジェクトでラップします。コレクションを変更しないすべての呼び出し ( get Count、 get Item[]、 ) をラップされたオブジェクトに渡しますが、コレクションを変更するすべての呼び出し ( 、、、 set )GetEnumeratorに対して例外をスローします。AddRemoveClearItem[]

配列はサイズ変更できませんが、読み取り専用ではありません。この違いを理解することは重要です。そうしないと、重大なセキュリティ上の問題が発生する可能性があります。例については、Path.InvalidPathChars Fieldを参照してください。

于 2009-10-26T16:46:48.510 に答える