假设我定义了一个这样的方法:
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
关键字时,幕后会发生什么?
您可以在文档中轻松搜索原因。
从 MSDN:
通过使用 params 关键字,可以指定采用可变数量的参数的方法参数。 可以发送参数声明中指定的类型的逗号分隔的参数列表或指定类型的参数数组。您也可以不发送任何参数。如果不发送任何参数,则参数列表的长度为零。 方法声明中的 params 关键字后不允许使用其他参数,并且方法声明中只允许一个 params 关键字。
params 关键字将函数转换为可变参数函数。可变参数函数可以采用从 0 到(理论上)无限参数的任何地方。所以这就是你的代码编译的原因。字符串。格式函数是可变参数函数的经典示例。
如果要创建必须接受至少一个参数的可变参数函数,可以执行以下操作(在 C# 中):
int methodname(int arg1, param int[] restOfArgs) {}
此时,您将被迫为函数提供至少一个参数
MSDN 链接
http://msdn.microsoft.com/en-us/library/w5zay9db.aspx
通过使用 params 关键字,可以指定一个方法参数 采用可变数量的参数。您可以发送逗号分隔 参数声明中指定的类型的参数列表 或指定类型的参数数组。您也可以发送不 参数。如果不发送任何参数,则参数列表的长度为 零。params 关键字后不允许使用其他参数 在方法声明中,并且只允许在 方法声明。