System.Array не поддерживает Add(), так как же работает инициализатор коллекции?
В C# вы можете инициализировать массив следующим образом:
var example = new int[] { 1, 4, 3 };
Как указано в пользовательских инициализаторах коллекции:
Объект коллекции, к которому применяется инициализатор коллекции, должен относиться к типу, который реализует System.Collections.IEnumerable, иначе возникает ошибка времени компиляции. Для каждого указанного элемента по порядку инициализатор коллекции вызывает метод Add для целевого объекта со списком выражений инициализатора элемента в качестве списка аргументов, применяя нормальное разрешение перегрузки для каждого вызова. Таким образом, объект коллекции должен содержать применимый метод Add для каждого инициализатора элемента.
Но вы не можете добавить в System.Array, нужно создать новый больший массив для каждого добавленного элемента, что не очень хорошо для производительности. Так как же работает C# при использовании инициализатора коллекции в массиве? Интересно, смогу ли я написать класс с внутренним массивом, который поддерживает инициализатор коллекции.
2 ответа
Array
не пользовательская коллекция. Это массив. инициализаторы массива предшествовали инициализаторам коллекции, и это было то, что вдохновило синтаксис.
Предоставленная вами цитата относится к пользовательским коллекциям.
Но массив не является пользовательской коллекцией, он является встроенным типом и имеет собственную спецификацию синтаксиса инициализатора, доступную здесь. В частности, эта спецификация не требует Add
метод.