Tengo una clase que contiene una colección. Deseo proporcionar un método o propiedad que devuelva los contenidos de la colección. Está bien si las clases de llamada pueden modificar los objetos individuales, pero no quiero que agreguen o eliminen objetos de la colección real. He estado copiando todos los objetos a una nueva lista, pero ahora estoy pensando que podría devolver la lista como IEnumerable <>.Cómo devolver una copia de solo lectura de una colección
En el ejemplo simplificado a continuación, ¿GetListC es la mejor manera de devolver una versión de solo lectura de una colección?
public class MyClass
{
private List<string> mylist;
public MyClass()
{
mylist = new List<string>();
}
public void Add(string toAdd)
{
mylist.Add(toAdd);
}
//Returns the list directly
public List<String> GetListA
{
get
{
return mylist;
}
}
//returns a copy of the list
public List<String> GetListB
{
get
{
List<string> returnList = new List<string>();
foreach (string st in this.mylist)
{
returnList.Add(st);
}
return returnList;
}
}
//Returns the list as IEnumerable
public IEnumerable<string> GetListC
{
get
{
return this.mylist.AsEnumerable<String>();
}
}
}
Está en el espacio de nombres System.Collections.ObjectModel. – mbillard
Huh, me sorprende que haya estropeado esa. –
Por supuesto, deberá reemplazar el tipo de devolución de List a ReadOnlyCollection o ICollection o IEnumrable –
Yona