Freigeben über


CA2230: params für Variablenargumente verwenden

TypeName

UseParamsForVariableArguments

CheckId

CA2230

Kategorie

Microsoft.Usage

Unterbrechende Änderung

Breaking

Ursache

Ein öffentlicher oder geschützter Typ enthält eine öffentliche oder geschützte Methode, die die VarArgs-Aufrufkonvention verwendet.

Regelbeschreibung

Die VarArgs-Aufrufkonvention wird in bestimmten Methodendefinitionen verwendet, die eine variable Anzahl von Parametern übernehmen. Methoden, die die VarArgs-Aufrufkonvention verwenden, sind nicht CLS-kompatibel, und möglicherweise kann nicht in allen Programmiersprachen darauf zugegriffen werden.

In C# wird die VarArgs-Aufrufkonvention verwendet, wenn die Parameterliste einer Methode mit dem __arglist-Schlüsselwort endet. Visual Basic unterstützt die VarArgs-Aufrufkonvention nicht, und Visual C++ lässt ihre Verwendung nur in nicht verwaltetem Code zu, in dem die Auslassungsnotation ... verwendet wird.

Behandeln von Verstößen

Um einen Verstoß dieser Regel in C# zu beheben, verwenden Sie statt __arglist das params (C#-Referenz)-Schlüsselwort.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie keine Warnung dieser Regel.

Beispiel

Im folgenden Beispiel werden zwei Methoden veranschaulicht: eine Methode, die gegen die Regel verstößt, und eine Regel, die der Regel entspricht.

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

Siehe auch

Referenz

System.Reflection.CallingConventions

Konzepte

Common Language Specification