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