C# 中的可变长度参数数组(params
关键字)
C# 支持通过使用 params
关键字来定义可变长度参数数组,使得方法可以接受任意数量的参数。此功能使得调用者可以以更灵活的方式传递参数,而无需显式构造数组。
语法
public void MethodName(params 类型[] 参数名)
params
关键字:用于定义一个方法参数,它可以接收零个或多个同一类型的参数。- 类型:指定参数数组中每个元素的类型。
- 参数名:定义数组的名称,供方法内部访问。
使用示例
1. 基本示例
定义一个方法,接受任意数量的整数并计算它们的总和:
public void PrintSum(params int[] numbers)
{
int sum = 0;
foreach (var num in numbers)
{
sum += num;
}
Console.WriteLine($"Sum: {sum}");
}
// 调用方法
PrintSum(1, 2, 3, 4); // 输出:Sum: 10
PrintSum(10, 20); // 输出:Sum: 30
PrintSum(); // 输出:Sum: 0(没有传递参数)
2. 结合其他参数
可变参数数组可以与其他普通参数一起使用,但必须是最后一个参数:
public void PrintNumbers(string message, params int[] numbers)
{
Console.WriteLine(message);
foreach (var num in numbers)
{
Console.WriteLine(num);
}
}
// 调用方法
PrintNumbers("Here are the numbers:", 1, 2, 3, 4);
输出:
Here are the numbers:
1
2
3
4
3. 传递数组
如果已经有一个数组,可以直接将其作为参数传递:
int[] myNumbers = { 5, 10, 15 };
PrintSum(myNumbers); // 输出:Sum: 30
注意事项
-
只能有一个
params
参数:
一个方法中最多只能定义一个params
参数,并且它必须是最后一个参数。public void InvalidMethod(params int[] nums, string message); // 错误:params 不是最后一个参数
-
可以不传递参数:
调用方法时,可以完全省略可变参数,此时参数数组的长度为 0。 -
不能与类型不匹配的参数结合:
传递的参数必须能够隐式转换为参数数组的元素类型,否则会导致编译错误。
应用场景
-
灵活的参数传递:
提供支持任意数量参数的功能,如日志记录、数学运算、格式化输出等。public void Log(params string[] messages) { foreach (var message in messages) { Console.WriteLine(message); } } Log("Error", "File not found", "Retrying connection...");
-
提升代码可读性:
避免调用者手动创建数组,简化方法调用。 -
通用工具方法:
如Console.WriteLine
本身就使用了params
关键字支持格式化字符串和任意数量的参数。
示例:实现自己的 Join
方法
实现一个类似 string.Join
的功能,连接字符串:
public string JoinStrings(string separator, params string[] values)
{
return string.Join(separator, values);
}
// 调用方法
string result = JoinStrings(", ", "Apple", "Banana", "Cherry");
Console.WriteLine(result); // 输出:Apple, Banana, Cherry
总结
params
关键字让方法更加灵活,允许接收可变数量的参数。- 它适用于需要支持任意数量参数的方法,避免显式构造数组的繁琐。
- 使用时要注意
params
必须是方法的最后一个参数,并且只能有一个params
参数。