ZetCode

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 与数组一起使用

此示例演示了使用带有数组的 params 来计算平均值。

Program.cs
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> 一起使用

此示例将 paramsList<int> 一起使用来对数字求和。

Program.cs
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> 一起使用

此示例将 paramsSpan<string> 一起使用来连接字符串。

Program.cs
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> 参数组合在一起。

Program.cs
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

Program.cs
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> 参数。

Program.cs
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 与集合一起使用时

来源

params 关键字 - 语言参考

本教程演示了如何在 C# 中将 params 关键字与各种集合类型一起使用,以实现灵活的方法参数。

作者

我叫 Jan Bodnar,是一位热情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直在撰写编程文章。 迄今为止,我已经撰写了 1,400 多篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有 C# 教程