Чтобы использовать синтаксис инициализации, как это:Почему метод Add необходим для {} инициализации?
var contacts = new ContactList
{
{ "Dan", "[email protected]" },
{ "Eric", "[email protected]" }
};
... Я понимаю, что мой ContactList
тип would need to define an Add
method, которая принимает два параметра: string
public void Add(string name, string email);
Что немного сбивает с толку мне о том, что синтаксис инициализатора { }
представляется наиболее полезным при создании коллекций только для чтения или фиксированного размера. В конце концов, он предназначен для имитации синтаксиса инициализации для массива , правильно? (ОК, поэтому массивы не доступны только для чтения, но они - фиксированный размер). И, естественно, его можно использовать только тогда, когда содержимое коллекции известно (по крайней мере, количество элементов) во время компиляции.
Таким образом, было бы почти казаться, что основное требование для использования синтаксиса инициализатора коллекции (имеющего метод Add
и, следовательно, изменяемую коллекцию) противоречит типичному случаю, в котором это было бы наиболее полезно.
Я уверен, что я не задумывался над этим вопросом, как команда разработчиков C#; просто кажется, что для этого синтаксиса могут быть разные правила, которые бы лучше соответствовали бы его типичным сценариям использования.
Как я отступаю от базы здесь? Желательно ли использовать синтаксис { }
для инициализации коллекций фиксированного размера, которые не так распространены, как я думаю? Какие другие факторы могли повлиять на формулировку требований к этому синтаксису, о которых я просто не думаю?
Это добавляет выразительную силу к языку; он позволяет выразить инициализацию коллекции * в виде дерева выражений lambda *. –
@ Эрик, вы все равно не можете сделать это в блоке выбора? Или инкапсулировать его в метод? – jjnguy
Выберите не принимает блок, он принимает выражение. И как инкапсулировать его в методе помощи в случае дерева выражений? Как переводчик запросов знает, что метод инициализирует коллекцию и что семантика «инициализировать коллекцию» должна быть переведена в инструкции на уровне доступа к данным? –