C# params 关键字与集合
最后修改于 2025 年 4 月 19 日
本教程探讨如何在 C# 中将 params 关键字与各种集合类型(如 List<T>、Span<T> 和 IEnumerable<T>)一起使用。
在 C# 13 中,params 关键字已扩展为支持数组以外的其他集合类型,从而实现更灵活、更高效的方法参数处理。
了解 C# 中的 params 关键字
params 关键字允许方法接受可变数量的参数,这些参数在方法内部被视为集合。 在 C# 13 中,除了数组之外,params 现在还支持 List<T>、Span<T>、IEnumerable<T> 等类型。
params 的主要特征
- 它必须是方法签名中的最后一个参数。
- 每个方法只允许一个
params参数。 - 它支持特定的集合类型,例如
List<T>或Span<T>。 - 它允许传递零个或多个参数。
将 params 与数组一起使用
此示例演示了使用带有数组的 params 来计算平均值。
double Average(params int[] numbers)
{
return numbers.Length > 0 ? numbers.Average() : 0;
}
int[] values = { 4, 8, 12 };
Console.WriteLine(Average(1, 2, 3));
Console.WriteLine(Average(values));
Average 方法计算可变数量的整数或直接传递的数组的平均值。
$ dotnet run 2 8
将 params 与 List<T> 一起使用
此示例将 params 与 List<int> 一起使用来对数字求和。
int SumNumbers(params List<int> numbers)
{
return numbers.Sum();
}
Console.WriteLine(SumNumbers(1, 2, 3));
Console.WriteLine(SumNumbers(10, 20, 30, 40));
Console.WriteLine(SumNumbers());
SumNumbers 方法接受可变数量的整数作为 List<int> 并返回它们的总和。
$ dotnet run 6 100 0
将 params 与 Span<T> 一起使用
此示例将 params 与 Span<string> 一起使用来连接字符串。
string ConcatStrings(params Span<string> words)
{
return string.Join(" ", words.ToArray());
}
Console.WriteLine(ConcatStrings("Hello"));
Console.WriteLine(ConcatStrings("C#", "is", "awesome"));
Console.WriteLine(ConcatStrings());
ConcatStrings 方法连接来自 Span<string> 的字符串,处理任意数量的输入。
$ dotnet run Hello C# is awesome
将 params 与 IEnumerable<T> 一起使用
此示例将固定参数与 params IEnumerable<string> 参数组合在一起。
void PrintItems(string category, params IEnumerable<string> items)
{
Console.WriteLine($"Category: {category}");
foreach (var item in items)
{
Console.WriteLine($" - {item}");
}
}
PrintItems("Fruits", new[] { "Apple", "Banana", "Orange" });
PrintItems("Tools", "Hammer", "Screwdriver");
PrintItems 方法接受一个类别和可变数量的项目作为 IEnumerable<string>,并将它们打印在列表中。
$ dotnet run Category: Fruits - Apple - Banana - Orange Category: Tools - Hammer - Screwdriver
将 params 与 ReadOnlySpan<T> 一起使用
此示例演示了带有 ReadOnlySpan<object> 的 params。
void DisplayValues(params ReadOnlySpan<object> values)
{
foreach (var value in values)
{
Console.WriteLine($"Value: {value}");
}
}
DisplayValues(42, "Hello", 3.14, true);
DisplayValues("Test", 100);
DisplayValues 方法接受可变数量的对象作为 ReadOnlySpan<object>,并显示每个对象。
$ dotnet run Value: 42 Value: Hello Value: 3.14 Value: True Value: Test Value: 100
将集合传递给 params
此示例显示了将 List<int> 传递给 params List<int> 参数。
int MaxValue(params List<int> numbers)
{
return numbers.Any() ? numbers.Max() : 0;
}
List values = [5, 2, 8, 1, 9];
Console.WriteLine(MaxValue(1, 2, 3));
Console.WriteLine(MaxValue(values));
MaxValue 方法从可变数量的整数或直接传递的 List<int> 中找到最大值。
$ dotnet run 3 9
最佳实践
在 C# 中将 params 与集合一起使用时
- 选择适当的集合类型(例如,
Span<T>以获得性能)。 - 在方法逻辑中优雅地处理空集合。
- 避免使用
params重载以防止歧义。 - 为了类型安全,使用特定类型代替
object。
来源
本教程演示了如何在 C# 中将 params 关键字与各种集合类型一起使用,以实现灵活的方法参数。
作者
列出所有 C# 教程。