У меня есть класс Item, который имеет общедоступный элемент NoSetter, который не содержит setter. Объект явно указывает get, который извлекает частный объект Listonly Listonly.Как встроенный список переопределяет свойство без setter?
class Item
{
private readonly List<string> emptyString;
public Item()
{
this.emptyString = new List<string>();
}
public List<string> NoSetter
{
get { return this.emptyString; }
}
}
При создании этого объекта, вы не можете установить NoSetter в список, то компилятор не может каждый раз, когда вы пытаетесь.
List<string> goldenString = new List<string>();
goldenString.Add("Nope");
Item item = new Item()
{
NoSetter = goldenString
// or NoSetter = new List<string>();
};
Однако, если вы создаете список встроенных, вы можете установить NoSetter.
Item item = new Item()
{
NoSetter = { "But this still works" }
};
// Outputs: "But this still works"
Console.WriteLine(item.NoSetter.First<string>());
Я ожидаю, что метод NoSetter.Get должен быть возвращенным только для чтения списка emptyString, но вместо этого возвращает объект встраиваемого NoSetter. Что вызывает это в .net? Ожидается?
Этот 'NoSetter = {" Но это все еще работает "}' не похоже на синтаксис 'Add', вы, вероятно, правы, но есть ли какая-либо ссылка на него? – Habib
Я отчаянно ищу ...;) –
Теперь это имеет смысл. Readonly emptyString не является неизменным, просто не назначается. – Joshua