CA2230: 可変引数に対して param を使用します
TypeName |
UseParamsForVariableArguments |
CheckId |
CA2230 |
分類 |
Microsoft.Usage |
互換性に影響する変更点 |
あり |
原因
パブリック型またはプロテクト型に、VarArgs 呼び出し規約を使用するパブリック メソッドまたはプロテクト メソッドが含まれます。
規則の説明
VarArgs 呼び出し規約は、可変個のパラメーターを使用する特定のメソッド定義で使用されます。VarArgs 呼び出し規約を使用するメソッドは、共通言語仕様 (CLS) 準拠ではありません。また、プログラミング言語が異なるとアクセスできないことがあります。
C# では、メソッドのパラメーター リストが __arglist キーワードで終わるときに、VarArgs 呼び出し規約を使用します。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]);
}
}
}
}