Новые выражения коллекций в .NET 8



C# 12 привнёс лаконичный синтаксис для инициализации коллекций, открыв много новых возможностей.



1️⃣ Квадратные скобки



Теперь списки, массивы, спаны и прочее можно объявлять как в JavaScript!



Правда, в случае переменных нужно обязательно указывать target type:



int[] intArray = [1, 2, 3];

List<int> intList = [4, 5, 6];

ImmutableArray<object> emptyCollection = [];




Это работает и для свойств, полей, параметров методов и так далее.



2️⃣ Развёртка коллекции



Опять же, подобное уже было в JavaScript - оператором .. можно несколько коллекций соединять в один плоский массив:



string[] vowels = ["a", "e", "i", "o", "u"];

string[] consonants = ["b", "c", "d", "f", "g", "h", "j", "k", "l", "m",

"n", "p", "q", "r", "s", "t", "v", "w", "x", "z"];

string[] alphabet = [.. vowels, .. consonants, "y"];




3️⃣ Поддержка пользовательских типов данных



Если у вас есть свой тип данных, для которого хочется подключить выражения коллекций, то необходимо сделать три вещи:



Реализовать интерфейс IEnumerable<T>

Написать статический класс билдер с фабричным методом, который создаёт объект вашего типа из коллекции

Пометить тип атрибутом [CollectionBuilder], указав класс строитель и имя фабричного метода



Подробнее можно прочитать по ссылке