Mam klasę, która zawiera kolekcję. Chcę podać metodę lub właściwość, która zwraca zawartość kolekcji. Jest ok, jeśli wywoływanie klas może modyfikować poszczególne obiekty, ale nie chcę, aby dodawały lub usuwały obiekt z rzeczywistej kolekcji. Kopiowałem wszystkie obiekty do nowej listy, ale teraz myślę, że mogę po prostu zwrócić listę jako IEnumerable <>.Jak zwrócić tylko do odczytu kopię kolekcji
W uproszczonym przykładzie poniżej GetListC jest najlepszym sposobem, aby zwrócić wersję tylko do odczytu kolekcji?
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>();
}
}
}
To w przestrzeni nazw System.Collections.ObjectModel. – mbillard
Huh, jestem zaskoczony, że to zepsułem. –
Oczywiście trzeba będzie zastąpić typ zwrotu z listy na ReadOnlyCollection lub ICollection lub IEnumrable –
Yona