Condividi tramite


CA2230: Utilizzare params per argomenti variabili

TypeName

UseParamsForVariableArguments

CheckId

CA2230

Category

Microsoft.Usage

Breaking Change

Breaking

Causa

Un tipo pubblico o protetto contiene un metodo pubblico o protetto che utilizza la convenzione di chiamata VarArgs.

Descrizione della regola

La convenzione di chiamata VarArgs viene utilizzata con determinate definizioni di metodi che accettano un numero variabile di parametri.Un metodo che utilizza la convezione di chiamata VarArgs non è conforme a CLS (Common Language Specification) e potrebbe non essere accessibile tra i diversi linguaggi di programmazione.

In C#, la convenzione di chiamata VarArgs viene utilizzata quando l'elenco di parametri di un metodo termina con la parola chiave __arglist.In Visual Basic la convenzione di chiamata VarArgs non è supportata e Visual C++ ne consente l'utilizzo solo nel codice non gestito che utilizza la notazione dei puntini di sospensione ....

Come correggere le violazioni

Per correggere una violazione di questa regola in C#, utilizzare la parola chiave params (Riferimenti per C#) anziché __arglist.

Esclusione di avvisi

Non escludere un avviso da questa regola.

Esempio

Nell'esempio riportato di seguito vengono illustrati due metodi, uno che viola la regola e uno che la soddisfa.

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

Vedere anche

Riferimenti

System.Reflection.CallingConventions

Concetti

Common Language Specification