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";
将工作......不是与第二个。数组始终是可变的,即使您无法添加/删除,您也可以按索引重新分配。只读集合就是:只读。
中的项目strList
可以更改(不是添加或删除,而是更改)。
在第一个声明中,您仍然可以使用以下内容:
strList[0] = "Not a fruit";
ReadOnlyCollection<T>
将 any 包裹IList<T>
在一个轻量级对象中。它将所有不会更改集合的调用传递给包装的对象(get Count
、get Item[]
、 ),但对所有会更改集合的调用(、、、set )GetEnumerator
抛出异常。Add
Remove
Clear
Item[]
数组不可调整大小,但它们不是只读的。了解区别很重要,否则您可能会引入一些严重的安全问题,例如,请参阅Path.InvalidPathChars 字段。