CA2230:对可变数量的参数使用 params

类型名

UseParamsForVariableArguments

CheckId

CA2230

类别

Microsoft.Usage

是否重大更改

原因

公共或受保护类型包含一个使用 VarArgs 调用约定的公共或受保护方法。

规则说明

VarArgs 调用约定与采用个数可变的参数的特定方法定义一起使用。 使用 VarArgs 调用约定的方法不符合公共语言规范 (CLS),因此可能无法被所有编程语言访问。

在 C# 中,当方法的参数列表以 __arglist 关键字结尾时,使用 VarArgs 调用约定。 Visual Basic 不支持 VarArgs 调用约定,且 Visual C++ 仅允许它在使用省略号 ... 表示法的非托管代码中使用。

如何解决冲突

要修复 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

概念

公共语言规范