“params” 关键字
本课属于 Coddy C# 学习旅程的“面向对象编程”单元。第 47 课,共 70 课。
params 关键字允许方法接受数量可变且类型相同的参数。调用者无需手动创建数组,可以直接传入参数,并用逗号分隔。
在方法签名中,将 params 放在数组参数前面:
public static int Sum(params int[] numbers)
{
int total = 0;
foreach (int n in numbers)
total += n;
return total;
}
// 这些调用都能正常运行
Console.WriteLine(Sum(1, 2)); // 3
Console.WriteLine(Sum(1, 2, 3, 4, 5)); // 15
Console.WriteLine(Sum()); // 0(空数组)编译器会自动将参数包装成数组。如果你已经有一个数组,也可以直接传入:
int[] values = { 10, 20, 30 };
Console.WriteLine(Sum(values)); // 60有几条规则需要记住:一个方法只能有一个 params 参数,而且它必须是列表中的最后一个参数。你可以将它与普通参数组合使用:
public static void Log(string prefix, params object[] items)
{
foreach (var item in items)
Console.WriteLine(prefix + item);
}
Log("Item: ", "Apple", 42, true);params 关键字让 API 更灵活,也更方便调用者使用,这就是为什么你会在 Console.WriteLine 和 string.Format 这样的方法中看到它。
挑战
简单我们来构建一个灵活的消息格式化工具,使用 params 关键字处理任意数量的值。你将创建一个实用类,用可变参数格式化消息,了解 params 如何让方法更加灵活,也更方便调用者使用。
你将把代码分到两个文件中:
MessageFormatter.cs:在Formatting命名空间中创建一个MessageFormatter类,并添加两个使用params的方法:Combine(params string[] parts):将提供的所有字符串用空格连接起来,并返回结果FormatList(string label, params int[] numbers):将普通参数与params数组结合使用。它应返回标签,后接冒号,然后是用逗号分隔的所有数字(例如,Scores: 85, 90, 78)
Program.cs:在主文件中,通过输入演示这两个方法。读取一个标签字符串,然后读取一行逗号分隔的整数。使用Combine连接三个固定的单词,并使用FormatList显示标签和数字。
你会收到两个输入:
- 一个标签字符串(例如,
Scores) - 一个逗号分隔的整数列表(例如,
85,90,78,92)
首先,用单词 "Hello"、"params" 和 "world!" 调用 Combine,并打印结果。然后将逗号分隔的整数解析为数组,并用标签和整数数组调用 FormatList,也打印出结果。
例如,如果输入是 Scores 和 85,90,78,输出应为:
Hello params world!
Scores: 85, 90, 78注意,Combine 可以直接接受任意数量的字符串,而 FormatList 展示了你可以将普通参数与 params 结合使用,params 参数只需要放在最后。你也可以将现有数组传给使用 params 的方法,这正是你要对解析出的整数所做的!
亲手试试
using System;
using Formatting;
class Program
{
public static void Main(string[] args)
{
// 读取输入
string label = Console.ReadLine();
string numbersInput = Console.ReadLine();
// TODO: 用 MessageFormatter.Combine 组合 "Hello"、"params" 和 "world!"
// 并打印结果
// TODO: 将逗号分隔的整数解析为 int 数组
// 提示:拆分字符串,并将每一部分转换为 int
// TODO: 将 label 和 int 数组传给 MessageFormatter.FormatList
// 并打印结果
}
}
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
面向对象编程中的所有课
自己练习: C# 在线编译器