共用方式為


CA2230:必須使用 params 做為變數引數

型別名稱

UseParamsForVariableArguments

CheckId

CA2230

分類

Microsoft.Usage

中斷變更

中斷

原因

公用或保護的型別包含使用 VarArgs 呼叫慣例 (Calling Convention) 之公用或保護的方法。

規則描述

VarArgs 呼叫慣例會和採用可變參數數目的某些方法定義一起使用。 使用 VarArgs 呼叫慣例的方法不符合 Common Language Specification (CLS) 標準,且無法跨程式語言存取。

在 C# 中,當方法的參數清單以 __arglist 關鍵字結尾時,就會使用 VarArgs 呼叫慣例。 Visual Basic 不支援 VarArgs 呼叫慣例,而 Visual C++ 只允許在使用省略符號 ... 標記法的 Unmanaged 程式碼中使用此慣例。

如何修正違規

若要在 C# 中修正此規則的違規情形,請改用 params (C# 參考) 關鍵字,而非 __arglist。

隱藏警告的時機

請勿隱藏此規則的警告。

範例

下列範例會顯示兩個方法,其中一個違反規則,而另一個符合規則。

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

概念

Common Language Specification