Оператор Расширения для Коллекций в C# 12.
Выражения коллекций (также известные как литералы коллекций) — это новая функция C#12, которая добавляет в C# оператор расширения. Он позволяет объединить коллекции распространённых типов (массивы, диапазоны и списки) в одну. Кроме того, для типов коллекций изменён синтаксис, который упрощает код и помогает уменьшить его многословность.
Инициализация
В версиях до C#12 инициализация типа коллекции была довольно многословной, поскольку нам приходилось указывать тип, который мы инициализируем. Например, вот как инициализировать массив, диапазон и список целыми числами:
var a = new int[] { 1, 2, 3 };
var b = new Span<int>(new int[] { 2, 4, 5, 4, 4 });
var c = new List<int> { 4, 6, 6, 5 };
Новый синтаксис в C#12
Теперь мы можем использовать выражения коллекций. Мы объявляем переменную с типом коллекции, который хотим использовать, а затем заключаем значения в квадратные скобки:
int[] a = [1, 2, 3];
Span<int> b = [2, 4, 5, 4, 4];
List<int> c = [4, 6, 6, 5];
Это сокращает количество кода, и, как по мне, более читабельно выглядит.
Оператор расширения (spread)
Оператор расширения популярен в JavaScript для объединения и добавления значений к существующим типам коллекций. И наконец он появился в C#.
Чтобы использовать его, инициализируйте новый тип коллекции, а затем добавьте .. перед добавлением переменной типа коллекции.
int[] join = [..a, ..b, ..c];
Также можно добавлять дополнительные значения:
int[] join = [..a, ..b, ..c, 6, 5];
Не имеет значения, какие типы коллекций мы объединяем, а также не имеет значения, какой тип коллекции используется для переменной, имеющей оператор расширения. Мы можем использовать оператор расширения для объединения разных типов коллекций и объявлять переменную любым из этих типов коллекций:
int[] a = [1, 2, 3];
Span<int> b = [2, 4, 5, 4, 4];
List<int> c = [4, 6, 6, 5];
List<int> join = [..a, ..b, ..c, 6, 5];
Источник: https://www.roundthecode.com/dotnet-tutorials/collection-expressions-brings-spread-operator-csharp-12