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

 更新时间:2012年01月12日 01:02:27   作者:  
个人认为,提供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这个数组。

相关文章

  • asp.net分页功能实现

    asp.net分页功能实现

    这篇文章主要介绍了asp.net分页功能是如何实现的,有整个解析思路,希望对大家的学习有所帮助。
    2015-09-09
  • asp.net运行原理 详解

    asp.net运行原理 详解

    当我们通过浏览器向ASP.NET 2.0网站的一个asp.net页面发起请求时,在服务器端首先是IIS收到请求,IIS一看是asp.net页面,心里很开心,因为这个请求不用它处理,交给ASP.NET ISAPI就行了
    2012-04-04
  • .net自带的库生成zip文件的方法

    .net自带的库生成zip文件的方法

    平时我们创建Zip文件的时候,要么用现成的软件,要么用第三方的开源库。其实用.net自带的类操作起来也非常方便
    2012-08-08
  • 基于.Net的单点登录(SSO)实现解决方案

    基于.Net的单点登录(SSO)实现解决方案

    SSO的解决方案很多,但搜索结果令人大失所望,大部分是相互转载,并且描述的也是走马观花,本文对此进行详细介绍,需要了解的朋友可以参考下
    2012-11-11
  • asp.net core中如何使用cookie身份验证

    asp.net core中如何使用cookie身份验证

    这篇文章主要介绍了asp.net core中如何使用cookie身份验证的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 禁止ViewState的3种解决方法

    禁止ViewState的3种解决方法

    默认情况下,ViewState是被启用的,比如提交表单后,表单中输入的值会自动保留。但是如果不需要保留,也可以将其禁用,这样可以节省资源。
    2013-03-03
  • .NET开发人员关于ML.NET的入门学习

    .NET开发人员关于ML.NET的入门学习

    随着谷歌,Facebook发布他们的工具机器学习工具Tensorflow 2和PyTorch,微软也发布了ML.NET 1.0。可以说2019年是机器学习社区普及化的一年,下面小编向大家简单介绍一下关于ML.NET的入门学习
    2019-05-05
  • WCF中使用nettcp协议进行通讯的方法

    WCF中使用nettcp协议进行通讯的方法

    这篇文章主要给大家介绍了关于WCF中使用nettcp协议进行通讯的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用WCF具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • .NET Core如何获取操作系统中的各种信息

    .NET Core如何获取操作系统中的各种信息

    .net core是最近讨论频率很高的话题,下面这篇文章主要给大家介绍了关于利用.NET Core如何获取操作系统中各种信息的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧
    2018-05-05
  • MVC使用Log4Net进行错误日志记录学习笔记4

    MVC使用Log4Net进行错误日志记录学习笔记4

    这篇文章主要为大家详细介绍了MVC使用Log4Net进行错误日志记录,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09

最新评论