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]);
            } 
        }
    }
}

See also