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