c# wcf readonly readonlycollection

c# - ¿Qué es una colección de solo lectura?



wcf readonly (6)

Ejecuté un analista de código de seguridad y me encontré con una advertencia de CA2105 . Miré el ejemplo de alteración de grado. No me di cuenta de que puedes asignar int [] a readonly int. Pensé que solo era como el const de C ++ y lo hace ilegal.

La sección Cómo solucionar las infracciones sugiere que cloné el objeto (que no quiero hacer) o que ''Reemplazó la matriz con una colección fuertemente tipada que no se puede cambiar''. Hice clic en el enlace y vi ''ArrayList'' y agregué cada elemento uno por uno y no parece que pueda evitar que se agregue algo más.

Entonces, cuando tengo esta pieza de código, ¿cuál es la forma más fácil o mejor de convertirla en una colección de solo lectura?

public static readonly string[] example = { "a", "b", "sfsdg", "sdgfhf", "erfdgf", "last one"};


Estaba buscando una solución similar, pero quería poder modificar la colección desde dentro de la clase, así que elegí la opción que se describe aquí: http://www.csharp-examples.net/readonly-collection/

En resumen, su ejemplo es:

public class MyClass { private List<int> _items = new List<int>(); public IList<int> Items { get { return _items.AsReadOnly(); } } }


La forma más fácil de tener una colección que no puedes modificar es usar

ReadOnlyCollection

Ejemplo de 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);


Si está trabajando con matrices, puede usar

return Array.AsReadOnly(example);

para envolver su matriz en una colección de solo lectura.


public static readonly ReadOnlyCollection<string> example = new ReadOnlyCollection<string>(new string[] { "your", "options", "here" });

(aunque todavía debería estar expuesto como una propiedad get lugar de un campo público)


var readOnly = new ReadOnlyCollection<string>(example);


ReadOnlyCollection<string> readOnlyCollection = new ReadOnlyCollection<string>(example);