.NET 9 : Params Collections

Prior to .NET 9, the params keyword supported only arrays.Params array is a special type of parameter that allows a method to accept a variable number of arguments of the same data type. It's declared using the params keyword followed by the array type.

How does the param work?

  1. Argument Passing
    • We can pass any number of arguments of the specified data type to the method.
    • These arguments are automatically collected into an array.
  2. Inside the Method
    • The params array is treated like a regular array.
    • We can iterate over it, access its elements, and perform operations on it.

Example

static void PrintSumOfNumbers(params int[] numbers)
{
    var sum = numbers.Sum();
    Console.Write($"Sum of Numbers: {sum}");
}

PrintSumOfNumbers(1, 2, 3, 4, 5);

Output

Params array

.NET 9 extends the params keyword to support a wider range of collections, including those used in collection expressions (introduced in .NET 8), beyond traditional arrays.

Example

static void PrintSumOfNumbers(params IEnumerable<int> numbers)
{
    var sum = numbers.Sum();
    Console.WriteLine($"Sum of numbers : {sum}");
}

PrintSumOfNumbers(1, 2, 3, 4, 5);
PrintSumOfNumbers(new[] { 1, 2, 3, 4, 5 });
PrintSumOfNumbers(new List<int> { 1, 2, 3, 4, 5 });

Here, PrintSumOfNumbers demonstrates the params keyword's flexibility with IEnumerable. It's called with comma-separated values, integer arrays, and List<int> instances.

Output

 IEnumerable

A notable feature of params collections is their seamless integration with Span<T> and ReadOnlySpan<T>. This enables efficient memory utilization and reduces overhead, contributing to improved performance.

Example

static void PrintSumOfNumbers(params ReadOnlySpan<int> numbers)
{
    var sum = 0;
    foreach (var number in numbers)
    {
        sum += number;
    }
    Console.WriteLine($"Sum of numbers: {sum}");
}

var numbers = new int[] { 1, 2, 3, 4, 5 };
PrintSumOfNumbers(numbers);

Output

Output

Param collections can accelerate your applications, even without direct code changes, as the .NET runtime can now employ high-performance types like Span<T> in more scenarios. The familiar params syntax remains unchanged, offering callers greater flexibility in method invocation while the compiler efficiently selects the appropriate overload.

Happy Coding!

Up Next
    Ebook Download
    View all
    Learn
    View all