CA2230: Use params for variable arguments
TypeName |
UseParamsForVariableArguments |
CheckId |
CA2230 |
Category |
Microsoft.Usage |
Breaking Change |
Breaking |
Cause
A public or protected type contains a public or protected method that uses the VarArgs calling convention.
Rule Description
The VarArgs calling convention is used with certain method definitions that take a variable number of parameters. A method using the VarArgs calling convention is not Common Language Specification (CLS) compliant and might not be accessible across programming languages.
In C#, the VarArgs calling convention is used when a method's parameter list ends with the __arglist keyword. Visual Basic does not support the VarArgs calling convention, and Visual C++ allows its use only in unmanaged code that uses the ellipse ... notation.
How to Fix Violations
To fix a violation of this rule in C#, use the params (C# Reference) keyword instead of __arglist.
When to Suppress Warnings
Do not suppress a warning from this rule.
Example
The following example shows two methods, one that violates the rule and one that satisfies the rule.
using System;
[assembly: CLSCompliant(true)]
namespace UsageLibrary
{
public class UseParams
{
// This method violates the rule.
[CLSCompliant(false)]
public void VariableArguments(__arglist)
{
ArgIterator argumentIterator = new ArgIterator(__arglist);
for(int i = 0; i < argumentIterator.GetRemainingCount(); i++)
{
Console.WriteLine(
__refvalue(argumentIterator.GetNextArg(), string));
}
}
// This method satisfies the rule.
public void VariableArguments(params string[] wordList)
{
for(int i = 0; i < wordList.Length; i++)
{
Console.WriteLine(wordList[i]);
}
}
}
}
See Also
Reference
System.Reflection.CallingConventions