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