Коллекции в Params
Всего месяц после выпуска .NET 8, а команда dotnet уже работает над следующей итерацией: .NET 9. Сегодня посмотрим на одно из предлагаемых нововведений: коллекции в параметрах с ключевым словом params.
Ключевое слово params в C# появилось давно. Оно позволяет передавать в метод переменное количество аргументов:
void PrintNums(params int[] nums)
{
foreach (var n in nums)
Console.WriteLine(n);
}
До сих пор оно было доступно только для массивов. Нововведение позволяет использовать его для коллекций любого типа:
void PrintNumsSpan(
params ReadOnlySpan<int> nums)
{
foreach (var n in nums)
Console.WriteLine(n);
}
void PrintNumsList(
params List<int> nums)
{
nums.ForEach(Console.WriteLine);
}
И теперь эти методы могут быть вызваны любым способом:
PrintNumsSpan(1, 2, 3);
PrintNumsList([1, 2, 3]);
Это позволяет добавить вариативности в использовании ваших методов клиентами и иметь более эффективный код внутри метода. Для полноты картины, в C# 12 вы уже могли сделать так:
List<int> numbers = [1,2,3];
PrintNums([..numbers]);
Тем не менее, новая версия удобнее. Также обещают решить проблемы производительности, присущие нынешней версии params, но это не точно (с).
Подробнее про нововведение можно почитать в предложении на GitHub или попробовать его в действии на SharpLab.
Источник: https://steven-giesel.com/blogPost/5f4fef86-d251-4a47-b893-ca4c515ca314/the-first-possible-new-feature-of-c-13-params-collection