收集上下文中ReadOnlyCollection string []之间的区别

时间:2009-10-26 16:43:04

标签: c# collections readonly

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

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

在这两种情况下,我都无法使用 “添加()” 方法添加新项目。 声明是一样的吗?

3 个答案:

答案 0 :(得分:3)

使用第一个,strList[2] = "Pear";将起作用...而不是第二个。数组总是可变的,因为你可以通过索引重新分配,即使你不能添加/删除。只读集合就是:只读。

答案 1 :(得分:3)

strList中的项目可以更改(不添加或删除,但已更改)。

答案 2 :(得分:2)

在第一个声明中,您仍然可以使用以下内容:

strList[0] = "Not a fruit";

ReadOnlyCollection<T>将任何IList<T>包装在轻量级对象中。它传递所有不会将集合更改为包装对象的调用(获取Count,获取Item[]GetEnumerator),但会为将更改集合的所有调用抛出异常(AddRemoveClear,设置Item[])。

数组不可调整大小,但它们不是只读的。区别对于理解很重要,或者您可以引入一些严重的安全问题,例如参见Path.InvalidPathChars Field