Работа с массивами в C#

❓Представим, что у нас есть какой-то список значений, который требуется дополнить одним элементом в начале и одним элементом в конце.

Сразу в голову приходит следующее:

// Начальная цена var veryFirstPrice = 10;

// Промежуточные цены var commonPrices = new List { 12, 55, 82 };

// Конечная цена var finalPrice = 89;

// Объявляем переменную для хранения всех цен var prices = new List();

// Теперь добавим все цены по порядку в наш список prices.Add(veryFirstPrice); prices.AddRange(commonPrices); prices.Add(finalPrice);

Тут сначала создаем пустую коллекцию, а потом последовательно добавляем в нее сначала значение в начало списка, потом перечень цен в середину, а потом еще одно значение - в конец.

❓А что, если хочется чего-то более лаконичного, в функциональном стиле, например? 🤫

В .NET есть возможность сделать так:

// Начальная цена var veryFirstPrice = 10;

// Промежуточные цены var commonPrices = new List { 12, 55, 82 };

// Конечная цена var finalPrice = 89;

// Добавим сразу один элемент в начало, в другой в конец списка промежуточных цен var prices = commonPrices.Prepend(veryFirstPrice).Append(finalPrice);

Получилось элегантней 🌟

Правда, Prepend и Append не изменяют исходную коллекцию, а возвращают новую.

Кроме этого эти методы имеют отложенное выполнение, соответственно, для работы с элементами результирующей последовательности, потребуется сделать так:

var priceItems = prices.ToList();

❗️Второй вариант не подойдет, если требуется экономить память и получить максимальную производительность в случае повторного обращения к элементам коллекции.

Хотите красоты функционального стиля, и вас вполне устраивает на выходе получить IEnumerable или List - второй вариант — то, что надо.