C# params 可变参数的使用注意详析
什么是 params?
C# 中的 params 关键字可以让我们定义一个可变长度参数列表。使用 params 关键字的方法可以接受零个或多个参数,参数在方法内部被视为数组,可以像普通数组一样进行访问。
使用 params 关键字定义的参数必须是方法的最后一个参数,而且一个方法只能拥有一个 params 关键字定义的参数。
如何使用 params?
定义 params 参数的语法如下:
void function(params type[] parameterName)
参数 type
可以是任意类型,包括基本类型和自定义类型。
下面是一个示例:
public int Sum(params int[] numbers)
{
int result = 0;
foreach (int number in numbers)
{
result += number;
}
return result;
}
上面的方法接受一个可变长度参数列表 numbers
,返回这些参数的总和。
我们可以像下面这样调用这个方法:
int sum = Sum(1, 2, 3, 4);
这样,参数 1, 2, 3, 4
将被自动打包成数组 [1, 2, 3, 4]
作为参数传给 Sum
方法。
注意事项
params
参数必须是方法的最后一个参数
在方法定义中,如果同时使用 params
关键字和其他参数,那么这些其他参数必须在 params
参数之前声明。否则编译器将会报错。
void function(params type[] parameterName, otherParameterType otherParameterName) // 错误,params 参数不是最后一个参数
void function(otherParameterType otherParameterName, params type[] parameterName) // 正确,params 参数是最后一个参数
params
参数必须是数组
在定义 params
参数时,必须显式指定数组类型。
void function(params int[] parameterName) // 正确
void function(params List<int> parameterName) // 错误,List<int> 不是数组类型
- 可变参数可以为零个
如果可变参数列表为空,那么传入的数组将是空数组,而不是空引用。
public void function(params int[] parameterName)
{
Console.WriteLine(parameterName == null); // false
Console.WriteLine(parameterName.Length); // 0
}
示例
- 可变参数列表和普通参数共存:
public int Multiply(int a, params int[] b)
{
int result = a;
foreach (int n in b)
{
result *= n;
}
return result;
}
int r1 = Multiply(2, 3, 4); // r1 = 2 * 3 * 4 = 24
int r2 = Multiply(2); // r2 = 2
在上面的例子中,Multiply
方法接受一个普通的参数 a
,和一个可变长度参数列表 b
。当 b
参数为空时,只返回 a
参数本身。
- 带 params 参数的方法重载:
public int Sum(params int[] numbers)
{
int result = 0;
foreach (int number in numbers)
{
result += number;
}
return result;
}
public double Sum(params double[] numbers)
{
double result = 0;
foreach (double number in numbers)
{
result += number;
}
return result;
}
int r1 = Sum(1, 2, 3, 4); // r1 = 1 + 2 + 3 + 4 = 10
double r2 = Sum(1.0, 2.5, 3.2); // r2 = 1.0 + 2.5 + 3.2 = 6.7
在上面的例子中,我们定义了两个重载方法 Sum
,分别接受 int
和 double
类型的可变参数列表。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# params可变参数的使用注意详析 - Python技术站