Честно говоря, вы вообще не должны предоставлять внешний доступ к этому списку, это нарушает инкапсуляцию. Даже если свойство объявлено IReadOnlyList<int>
, ничто не мешает кому-либо делать (List<int>)game.ListOfItemss
. Частный сеттер или нет, на самом деле не имеет значения, если вы ограничиваете доступ к внутренностям. Если вам нужен внешний доступ к элементам вашего списка, откройте его с помощью контролируемых методов, таких как индексатор.
class Option0
{
private readonly List<int> items;
public int this[int index] => this.items[index];
}
Только ваш класс или, возможно, производные классы должны иметь доступ к этому списку.
С учетом сказанного, если вы хотите представить его в виде списка, доступного только для чтения, откройте его только для чтения.
class Option1
{
private readonly List<int> items;
public IReadOnlyList<int> Items => items.AsReadOnly();
public Option1()
{
this.items = ...;
}
}
class Option2
{
private readonly List<int> items;
public IReadOnlyList<int> Items { get; }
public Option2()
{
this.items = ...;
this.Items = this.items.AsReadOnly();
}
}