C#11、params关键字的作用是什么
·
在 C# 中,params 关键字的作用是:允许方法接受可变数量的参数(不定长参数),而无需显式传入数组。
这是 C# 提供的一种语法糖,让调用方法时更简洁、直观。
✅ 1. 基本用法
你可以在方法的最后一个参数上使用 params,该参数必须是一维数组类型。
示例:
public static void PrintNumbers(params int[] numbers)
{
foreach (int num in numbers)
{
Console.WriteLine(num);
}
}
调用方式(两种都行):
✅ 方式1:直接传多个参数(推荐,简洁)
PrintNumbers(1, 2, 3, 4); // 自动打包成 int[] {1, 2, 3, 4}
✅ 方式2:显式传数组
int[] arr = { 5, 6, 7 };
PrintNumbers(arr);
💡 注意:
params参数必须是方法的最后一个参数,且一个方法只能有一个params参数。
✅ 2. 实际应用场景
场景1:日志记录
public static void Log(string format, params object[] args)
{
string message = string.Format(format, args);
Console.WriteLine(message);
}
// 调用
Log("Hello {0}, you have {1} messages.", "Alice", 5);
🔔 这其实就是
Console.WriteLine的实现原理!
场景2:求和、拼接等聚合操作
public static int Sum(params int[] values)
{
int total = 0;
foreach (int v in values) total += v;
return total;
}
// 调用
int result = Sum(10, 20, 30); // 返回 60
⚠️ 注意事项
| 规则 | 说明 |
|---|---|
| 只能用于最后一个参数 | void Foo(int x, params string[] args) ✅void Foo(params string[] args, int x) ❌ |
只能有一个 params 参数 |
不能写两个 params |
| 可以传 0 个参数 | PrintNumbers(); → numbers 是一个空数组(不是 null) |
| 性能提示 | 每次调用都会创建一个新数组(堆分配),高频调用需注意性能 |
✅ 3. 和普通数组参数的区别?
| 写法 | 调用方式 | 是否灵活 |
|---|---|---|
void M(int[] arr) |
必须传数组:M(new int[]{1,2}) |
❌ 不灵活 |
void M(params int[] arr) |
可传多个数:M(1,2) 或传数组 |
✅ 更灵活 |
所以,如果你希望方法既能接受“多个独立参数”,又能接受“数组”,就用
params。
📌 小结
params让方法支持可变参数列表。- 语法:
返回类型 方法名(params 类型[] 参数名) - 调用时可以直接写多个值,C# 会自动包装成数组。
- 常用于
Console.WriteLine、日志、工具方法等场景。
问题
为什么带有params修饰符的参数必须位于参数列表的最后?
因为如果他不是最后一个,且后面还有另一个参数,编译器将无法确定该参数是否属于params数组。
更多推荐
所有评论(0)