用C#的params关键字实现方法形参个数可变示例

作者:whsnow 时间:2022-04-14 01:53:16 

个人认为,提供params关键字以实现方法形参个数可变是C#语法的一大优点。在方法形参列表中,数组类型的参数前加params关键字,通常可以在调用方法时代码更加精练。

例如,下面代码:


class Program
{
static void Main(string[] args)
{
Console.WriteLine(Sum(1));
Console.WriteLine(Sum(1, 2, 3));
Console.WriteLine(Sum(1, 2, 3, 4, 5));
Console.ReadKey();
}
private static int Sum(params int[] values)
{
int sum = 0;
foreach (int value in values)
sum += value;
return sum;
}
}

实现了一个Sum方法,用于接收一组整数,并返回它们的和。参数values被加上params关键字后,在调用时可以在实参列表中列举出这组整数中的每个元素,非常方便。

关于params关键字的用法,需要注意以下几点:

1. params只能用于一维数组,不能用于多维数组和诸如ArrayList、List<T>等任何类似于数组的集合类型。

2.被加上params关键字的形参,必须是形参列表中最后一个形参,并且方法声明中只允许一个 params 关键字。

3. 用params关键字的方法,有四种调用形式:

第一种,列举出数组各元素:Sum(1,2,3),这也是最常用的形式;

第二种,像没有加params关键字的数组形参那样,用数组名做实参:Sum(new int[]{1,2,3})或int n=new int[]{1,2,3};Sum(n);;

第三种,加params关键字的参数在调用时可以省略:Sum();//返回0;这种方式有时可以少定义一个方法重载,但当明确定义了重载int Sum()时,编译器会优先调用int Sum(),而不是Sum(params int[] values)。而且省略params型参数,方法内部仍会new一个元素个数为0的数组,效率略查。

第四种,不省略params型参数,用null代替,效率比第三种略高,因为其内部不会new这个数组。

标签:params,形参
0
投稿

猜你喜欢

  • C# lambda表达式原理定义及实例详解

    2021-07-26 21:44:44
  • c#栈变化规则图解示例(栈的生长与消亡)

    2021-10-12 05:11:11
  • SpringSecurity登录使用JSON格式数据的方法

    2021-09-10 21:40:40
  • 详细理解JAVA面向对象的封装,继承,多态,抽象

    2023-07-05 06:54:14
  • java实现微信点餐申请微信退款

    2022-10-29 19:07:57
  • SpringBoot 静态资源导入及首页设置问题

    2023-11-26 22:45:07
  • 23种设计模式(12)java模版方法模式

    2021-10-24 11:00:31
  • 使用Java实现类似Comet风格的web app

    2023-04-01 10:23:22
  • springmvc 参数绑定总结

    2023-11-16 21:30:44
  • springboot自动配置原理以及spring.factories文件的作用详解

    2021-12-20 20:19:27
  • java IO流将一个文件拆分为多个子文件代码示例

    2023-08-30 12:46:15
  • 谈谈你可能并不了解的java枚举

    2023-11-09 21:08:55
  • Java中反射动态 代理接口的详解及实例

    2023-11-28 05:29:36
  • SpringBoot+Hutool+thymeleaf完成导出Excel的实现方法

    2023-09-05 17:39:10
  • C# List<T> Contains<T>()的用法小结

    2021-05-29 11:44:56
  • 在Spring Boot中使用Spring-data-jpa实现分页查询

    2023-12-03 21:35:39
  • 一文带你学会Spring JDBC的使用

    2023-11-29 17:05:34
  • Java实现级联下拉结构的示例代码

    2023-11-03 18:22:06
  • C#获取项目指定目录下文件的方法

    2023-04-19 07:15:26
  • springboot整合shardingsphere和seata实现分布式事务的实践

    2021-08-10 04:28:37
  • asp之家 软件编程 m.aspxhome.com