Why is this an issue?
Creating an array or using a collection expression solely for the purpose of passing it to a params parameter is unnecessary. Simply
pass the elements directly, and they will be automatically consolidated into the appropriate collection type.
How to fix it
Code examples
Noncompliant code example
public void Base()
{
Method(new string[] { "s1", "s2" }); // Noncompliant: resolves to string[] overload
Method(new string[] { }); // Noncompliant: resolves to string[] overload
Method(["s3", "s4"]); // Noncompliant: resolves to ReadOnlySpan overload
Method(new string[12]); // Compliant: resolves to string[] overload
}
public void Method(params string[] args)
{
// ...
}
public void Method(params ReadOnlySpan<string> args) // C# 13 params collections
{
// C# 13 params collection
}
Compliant solution
public void Base()
{
Method("s1", "s2"); // resolves to ReadOnlySpan overload
Method(); // resolves to ReadOnlySpan overload
Method("s3", "s4"); // resolves to ReadOnlySpan overload
Method(new string[12]); // resolves to string[] overload
}
public void Method(params string[] args)
{
// ..
}
public void Method(params ReadOnlySpan<string> args) // C# 13 params collections
{
// ..
}
Resources
Documentation
- Microsoft Learn -
paramsmodifier - Microsoft Learn - C# 13
paramscollections - Microsoft Learn - Collection expressions