Params Collections in C# 13

sharmila subbiah
C# Programming
Published in
2 min readJun 19, 2024
AI Generated Pic

What Are Param Collections?

The params keyword in C# allows a method to accept a variable number of arguments, which must be a single-dimensional array. This parameter must be the last in the method signature, and only one params parameter is allowed per method.

How Is It Used?

Example of a method to calculate the sum of integers:


List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int results = CalculateSum(numbers.ToArray());

Console.WriteLine(results);

int CalculateSum(params int[] numbers)
{
return numbers.Sum();

}

Limitations and Performance Considerations

Using params involves creating an array, which can affect performance, especially in loops or performance-critical code. Additionally, only one params parameter is allowed per method, and it must be the last parameter.

Changes in C# 13

C# 13 enhances the params keyword with:

  • Support for Multi-Dimensional Arrays: Simplifies method calls and improves readability.
  • Improved Type Inference: Better integration with generic methods and complex types.
  • Performance Optimizations: Reduced overhead and improved performance for high-frequency method calls.

Examples

Enhanced CalculateSum method in C# 13:


List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int results = CalculateSum(numbers);

Console.WriteLine(results);

int CalculateSum(params List<int> numbers)
{
return numbers.Sum();

}

Benchmarking the Performance

To evaluate the performance enhancements, we can set up a benchmark using BenchmarkDotNet:

using BenchmarkDotNet.Attributes;
using System;
using System.Collections.Generic;
using System.Linq;

[MemoryDiagnoser]
public class ParamsBenchmark
{
private List<int> numbers;

[GlobalSetup]
public void Setup()
{
numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
}

[Benchmark]
public int CalculateSumWithList()
{
return CalculateSum(numbers);
}

[Benchmark]
public int CalculateSumWithArray()
{
return CalculateSum(numbers.ToArray());
}

public int CalculateSum(params List<int> numbers)
{
return numbers.Sum();
}

public int CalculateSum(params int[] numbers)
{
return numbers.Sum();
}
}

Output:

The benchmark results indicate that the new enhanced params implementation in C# 13 offers better performance with no additional memory overhead.

Conclusion

The enhancements in C# 13 make params collections more powerful and efficient, catering to more complex use cases and improving overall performance.

--

--

sharmila subbiah
C# Programming

With over a decade of experience in the tech industry, I currently hold the position of Senior Software Engineer at Youlend.