Udostępnij za pośrednictwem


CA2230: Użyj parametrów dla zmiennych argumentów

Pozycja Wartość
Ruleid CA2230
Kategoria Microsoft.Usage
Zmiana powodująca niezgodność Kluczowa

Przyczyna

Typ publiczny lub chroniony zawiera publiczną lub chronioną metodę, która używa VarArgs konwencji wywoływania.

Uwaga

Ta reguła została przestarzała. Aby uzyskać więcej informacji, zobacz Przestarzałe reguły.

Opis reguły

Konwencja VarArgs wywoływania jest używana z określonymi definicjami metod, które przyjmują zmienną liczbę parametrów. Metoda używająca VarArgs konwencji wywoływania nie jest zgodna ze specyfikacją języka wspólnego (CLS) i może nie być dostępna w różnych językach programowania.

W języku C# konwencja wywoływania jest używana, VarArgs gdy lista parametrów metody kończy się __arglist słowem kluczowym. Język Visual Basic nie obsługuje VarArgs konwencji wywoływania, a język C++ umożliwia korzystanie z niego tylko w niezarządzanych kodzie korzystającym z notacji wielokropka ... .

Jak naprawić naruszenia

Aby naprawić naruszenie tej reguły w języku C#, użyj słowa kluczowego params zamiast __arglist.

Kiedy pomijać ostrzeżenia

Nie pomijaj ostrzeżeń dla tej reguły.

Przykład

W poniższym przykładzie przedstawiono dwie metody, które naruszają regułę i jedną, która spełnia regułę.

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

Zobacz też