Поскольку вы работаете с PHP, возможно, было бы более полезно дать вам обзор сочетаний клавиш синтаксиса CSharp!
На первый взгляд они действительно сбивают с толку, потому что синтаксис очень похож. Но после короткого вступления вы научитесь их любить.
Коллекция инициализаторов
Инициализатор коллекции добавляет элементы в коллекцию. Синтаксис new SOMECOLLECTION { value, value, value }
Традиционный способ заполнения коллекции:
var items = new List<int>();
items.Add(1);
items.Add(2);
items.Add(3);
Инициализатор коллекции - компилируется в почти идентичный код:
var items = new List<int>(){ 1, 2, 3 };
Примечание: Массив против списка -
Я бы сказал, что List
чаще используется, потому что его размер может измениться. Но это в основном личные предпочтения. Сокращенный способ создания массива: var items = new int[]{ 1, 2, 3 };
, но вы также можете опустить тип, и компилятор выяснит это (он же неявно типизированный массив): var items = new []{ 1, 2, 3 };
Инициализаторы объектов
Инициализатор объекта устанавливает свойства нового объекта. Синтаксис new SOMEOBJECT { Property = value, Property = value }
Традиционный способ заполнения свойств объекта:
var item = new Item();
item.First = "Chuck";
item.Last = "Norris";
Инициализатор объектов way:
var item = new Item(){ First = "Chuck", Last = "Norris" };
Анонимные объекты
Я только упоминаю об этом, потому что синтаксис для анонимного объекта чрезвычайно похож на другие, но делает что-то очень, очень другое. Они очень запутаны, если вы о них не знаете!
Синтаксис выглядит как комбинация инициализаторов коллекции и объекта: new { AnyPropertyName = value, anyVariableNameBecomesAProperty, someOtherObject.SomeProperty }
Позвольте мне объяснить! Компилятор создаст «анонимный объект», который имеет 3 свойства AnyPropertyName
, anyVariableNameBecomesAProperty
и SomeProperty
, и инициализирует значения так же, как это делает Object Initializer. Если вы не укажете имя свойства, оно будет выведено из источника.
Надеюсь, это поможет вам понять, почему new { h1, h2 }
(новый анонимный объект) НАСТОЛЬКО отличается от new []{ h1, h2 }
(новый массив).