-10

假设我定义了一个这样的方法:

public static void ListInts(int[] inVals)
{
    for (int i = 0; i < inVals.Length; i++)
    {
         Console.WriteLine("{0}", inVals[i]);
    } 
}

如果我尝试这样调用它,显然我得到一个错误并且代码将无法编译:

ListInts();

方法 'ListInts' 有一个参数,但使用 0 个参数调用

但是当我像这样更改方法定义时:

public static void ListInts(params int[] inVals)
{
    for (int i = 0; i < inVals.Length; i++)
    {
         Console.WriteLine("{0}", inVals[i]);
    } 
}

没有错误。我很好奇为什么会这样?为什么第二个代码编译没有任何错误?params当我们使用关键字时,幕后会发生什么?

4

3 回答 3

4

您可以在文档中轻松搜索原因。

来自MSDN

通过使用 params 关键字,您可以指定采用可变数量参数的方法参数。您可以发送参数声明中指定类型的参数的逗号分隔列表或指定类型的参数数组。您也可以不发送任何参数。如果您不发送任何参数,则参数列表的长度为零。方法声明中 params 关键字后面不允许有附加参数,方法声明中只允许有一个 params 关键字。

于 2013-12-25T15:40:27.520 回答
3

params 关键字使函数成为可变参数函数。可变参数函数可以采用从 0 到(理论上)无限的参数。所以这就是你的代码编译的原因。string.Format 函数是可变参数函数的经典示例。

如果要创建一个必须接受至少一个参数的可变参数函数,可以执行以下操作(在 C# 中):

   int methodname(int arg1, param int[] restOfArgs) {}

在这一点上,您将被迫为函数提供至少一个参数

于 2013-12-25T15:41:28.613 回答
2

MSDN 链接

http://msdn.microsoft.com/en-us/library/w5zay9db.aspx

通过使用 params 关键字,您可以指定采用可变数量参数的方法参数。您可以发送以逗号分隔的参数声明中指定类型的参数列表或指定类型的参数数组。您也可以不发送任何参数。如果不发送任何参数,则 params 列表的长度为零。方法声明中 params 关键字后面不允许有附加参数,方法声明中只允许有一个 params 关键字。

于 2013-12-25T15:41:53.683 回答