CA2230: Use params for variable arguments
Item | Value |
---|---|
RuleId | 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.
Note
This rule has been deprecated. For more information, see Deprecated rules.
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 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 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);
while (argumentIterator.GetRemainingCount() > 0)
{
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]);
}
}
}
}