Я выполнил аналитика кода в системе защиты, я имел предупреждение CA2105. Я посмотрел на пример вмешательства класса. Я не понял, что можно присвоить интервал [] к интервалу только для чтения. Я думал только для чтения, был похож на константу C++ и делает это недопустимым.
Как Зафиксировать Нарушения, предлагают, чтобы я клонировал объект (который я не хочу делать), или 'Заменяют массив набором со строгим контролем типов, который не может быть изменен'. Я нажал на ссылку, и см. 'ArrayList' и добавляющий каждый элемент один за другим, и не похоже, что можно предотвратить что-то добавляющее больше.
Таким образом, когда у меня есть эта часть кода, что самый легкий или лучший способ состоит в том, чтобы сделать ее набором только для чтения?
public static readonly string[] example = { "a", "b", "sfsdg", "sdgfhf", "erfdgf", "last one"};
Самый простой способ получить коллекцию, которую нельзя изменить, - это использовать
Пример из MSDN:
List<string> dinosaurs = new List<string>();
dinosaurs.Add("Tyrannosaurus");
dinosaurs.Add("Amargasaurus");
dinosaurs.Add("Deinonychus");
dinosaurs.Add("Compsognathus");
ReadOnlyCollection<string> readOnlyDinosaurs = new ReadOnlyCollection<string>(dinosaurs);
var readOnly = new ReadOnlyCollection<string>(example);
Если вы работаете с массивами, вы можете использовать
return Array.AsReadOnly(example);
, чтобы поместить ваш массив в коллекцию, доступную только для чтения.
public static readonly ReadOnlyCollection<string> example
= new ReadOnlyCollection<string>(new string[] { "your", "options", "here" });
(хотя оно, вероятно, должно быть представлено как свойство get
, а не как публичное поле)
ReadOnlyCollection<string> readOnlyCollection =
new ReadOnlyCollection<string>(example);