次の方法で共有


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

参照

関連項目

System.Reflection.CallingConventions

概念

共通言語仕様