Разница между строкой ReadOnlyCollection [] в контексте коллекции - PullRequest
1 голос
/ 26 октября 2009
IList<string> strList = new string[] { "Apple", "Mango", "Orange" };

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

В обоих случаях я не могу использовать "Add ()" метод для добавления новых элементов. Затем почти оба декларации одинаковы?

Ответы [ 3 ]

3 голосов
/ 26 октября 2009

Элементы в strList могут быть изменены (не добавлены или удалены, но изменены).

3 голосов
/ 26 октября 2009

С первым strList[2] = "Pear"; будет работать ... не со вторым. Массивы всегда изменчивы в том смысле, что вы можете переназначать их по индексу, даже если вы не можете добавлять / удалять. Коллекция только для чтения - это всего лишь: только для чтения.

2 голосов
/ 26 октября 2009

В первом объявлении вы все еще можете использовать следующее:

strList[0] = "Not a fruit";

ReadOnlyCollection<T> оборачивает любой IList<T> в легкий объект. Он передает все вызовы, которые не изменят коллекцию, на обернутый объект (get Count, get Item[], GetEnumerator), но выдает исключение для всех вызовов, которые изменят коллекцию (Add, Remove, Clear, набор Item[]).

Массивы не могут быть изменены, но они не доступны только для чтения. Это различие важно понять, или вы можете ввести некоторые серьезные проблемы с безопасностью, например, см. Path.InvalidPathChars Field .

...