Я пишу интерфейс, который имеет свойство коллекции, которое я хочу только для чтения. Я не хочу, чтобы пользователи интерфейса могли изменять коллекцию. Типичное предложение, которое я нашел для создания свойства коллекции только для чтения, - установить тип свойства в IEnumerable следующим образом:
private List<string> _mylist;
public IEnumerable<string> MyList
{
get
{
return this._mylist;
}
}
Тем не менее, это не мешает пользователю привести IEnumerable обратно к списку и изменить его.
Если вместо возврата _mylist
использовать ключевое слово Yield
, это не позволит пользователям моего интерфейса изменять коллекцию. Я так думаю, потому что тогда я возвращаю только объекты один за другим, а не фактическую коллекцию.
private List<string> _mylist;
public IEnumerable<string> MyList
{
get
{
foreach(string str in this._mylist)
{
yield return str;
}
}
}