C#中的可变长度参数数组是什么?请说明其使⽤⽅法

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

注意事项

  1. 只能有一个 params 参数
    一个方法中最多只能定义一个 params 参数,并且它必须是最后一个参数。

    public void InvalidMethod(params int[] nums, string message); // 错误:params 不是最后一个参数
    
  2. 可以不传递参数
    调用方法时,可以完全省略可变参数,此时参数数组的长度为 0。

  3. 不能与类型不匹配的参数结合
    传递的参数必须能够隐式转换为参数数组的元素类型,否则会导致编译错误。


应用场景

  1. 灵活的参数传递
    提供支持任意数量参数的功能,如日志记录、数学运算、格式化输出等。

    public void Log(params string[] messages)
    {
        foreach (var message in messages)
        {
            Console.WriteLine(message);
        }
    }
    Log("Error", "File not found", "Retrying connection...");
    
  2. 提升代码可读性
    避免调用者手动创建数组,简化方法调用。

  3. 通用工具方法
    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 参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

面试八股文

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值