У меня есть класс, содержащий коллекцию. Я хочу предоставить метод или свойство, которое возвращает содержимое коллекции. Это нормально, если вызовы классов могут изменять отдельные объекты, но я не хочу, чтобы они добавляли или удаляли объект из фактической коллекции. Я копировал все объекты в новый список, но теперь я думаю, что могу просто вернуть список как IEnumerable <>.Как вернуть копию только для чтения коллекции
В упрощенном примере ниже GetListC лучший способ вернуть только версию для чтения только для чтения?
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>();
}
}
}
Это в пространстве имен System.Collections.ObjectModel. – mbillard
Да, я удивлен, что я испортил это. –
Конечно, вам нужно будет заменить тип возврата из списка на ReadOnlyCollection или ICollection или IEnumrable –
Yona