Я уверен, что ReadOnlyCollection неизменна.
Она неизменна в том смысле, что вы не можете изменить какую коллекцию она переносит, или изменить эту коллекцию через нее.
Он не является неизменным в том смысле, что, поскольку ReadOnlyCollection
является оберткой, его можно изменить, изменив базовую коллекцию:
var list = new List<char>{ 'a', 'b', 'c' };
var ro = new ReadOnlyCollection<char>(list);
list.Add('d');
Console.WriteLine(string.Join(",", ro)); // a,b,c,d
Однако у вас наверняка может быть ReadOnlyCollection
, который является неизменным на практикеиз-за отсутствия ссылки на базовую коллекцию в любом месте (самый простой способ - скопировать ее при создании или создать эту коллекцию только при первом создании обертки только для чтения, а затем не иметь другой ссылки).
Это будет сделаноозначает, что вы придерживаетесь духа CA2104, поскольку вы не защищены от проблем, от которых он призван вас спасти.Тогда было бы разумно подавить предупреждение.
Я бы более осторожно относился к общим полям, предпочитая свойства, если только я не был уверен, что хочу поле, но это другой вопрос.