Поделиться через


CA2230: используйте параметры для аргументов переменной

TypeName

UseParamsForVariableArguments

CheckId

CA2230

Категория

Microsoft.Usage

Критическое изменение

Критическое изменение

Причина

Открытый или защищенный тип содержит открытый или защищенный метод, в котором используется соглашение о вызовах VarArgs.

Описание правила

Соглашение о вызовах VarArgs используется для некоторых определений методов, принимающих переменное число параметров.Метод, в котором используется соглашение о вызовах VarArgs, не соответствует спецификации CLS, и такие методы могут быть недоступны в некоторых языках программирования.

В C# соглашение о вызовах VarArgs используется в том случае, если список параметров метода заканчивается ключевым словом __arglist.В Visual Basic соглашение о вызовах VarArgs не поддерживается, а в Visual C++ его можно применять только в неуправляемом коде, использующем нотацию многоточия ....

Устранение нарушений

Чтобы устранить нарушение данного правила в C#, используйте вместо ключевого слова __arglist ключевое слово params (справочник по C#).

Отключение предупреждений

Для этого правила отключать вывод предупреждений не следует.

Пример

В следующем примере показаны два метода, один из которых нарушает данное правило, а другой удовлетворяет ему.

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

См. также

Ссылки

CallingConventions

Основные понятия

Независимость от языка и независимые от языка компоненты