IList<string> strList = new string[] { "Apple", "Mango", "Orange" };
IList<string> lst = new ReadOnlyCollection<string>(new[]{"Google",
"MSN","Yahoo"});
在这两种情况下,我都无法使用 “添加()” 方法添加新项目。 声明是一样的吗?
答案 0 :(得分:3)
使用第一个,strList[2] = "Pear";
将起作用...而不是第二个。数组总是可变的,因为你可以通过索引重新分配,即使你不能添加/删除。只读集合就是:只读。
答案 1 :(得分:3)
strList
中的项目可以更改(不添加或删除,但已更改)。
答案 2 :(得分:2)
在第一个声明中,您仍然可以使用以下内容:
strList[0] = "Not a fruit";
ReadOnlyCollection<T>
将任何IList<T>
包装在轻量级对象中。它传递所有不会将集合更改为包装对象的调用(获取Count
,获取Item[]
,GetEnumerator
),但会为将更改集合的所有调用抛出异常(Add
,Remove
,Clear
,设置Item[]
)。
数组不可调整大小,但它们不是只读的。区别对于理解很重要,或者您可以引入一些严重的安全问题,例如参见Path.InvalidPathChars Field。