当前位置: 首页 > news >正文

C# params参数的应用

为了将方法声明为可以接受可变数量参数的方法,我们可以使用params关键字来声明数组,如下所示:

public static Int32Add(params Int32[] values)

{

     Int32 sum = 0;

     for (Int32 x = 0; x < values.Length; x++)

     {

     sum += values[x];

     }

     return sum;

}

     只有方法的最后一个参数才可以标记params,该参数必须标识一个一维数组,但类型不限。对方法的最后一个参数传递null或者0个数目的数组的引用都是合法的,如下面代码调用上面Add方法,编译正常,运行正常,和期望一样结果为0:

public static void Main()

{

     Console.WriteLine(Add());

}

     下面看一下如何编写一个可以接受任意数量、任意类型的参数的方法,也就是把上面方法的Int32改成Object[]就可以了:

public static void Main()

{

     DisplayTypes(new Object(), new Random(), "string", 10);

}

public static void DisplayTypes(params Object[] objects)

{

     foreach(Object o in objects)

     {

          Console.WriteLine(o.GetType());   

     }

}

输出:

System.Object

System.Random

System.String

System.Int32

 

注意,对于可接受可变数量参数的方法的调用会对性能造成一定的损失,因为数组是在堆上分配的,数组的元素还得初始化,数组的内存还得被垃圾回收器回收,为了减少这种没必要的性能损失,我们希望定义几个没有params关键字的重载方法,如System.String类的Concat方法,如下:

public static string Concat(object arg0);

public static string Concat(params object[] args);

public static string Concat(params string[] values);

public static string Concat(object arg0, object arg1);

public static string Concat(string str0, string str1);

public static string Concat(object arg0, object arg1, object arg2);

public static string Concat(string str0, string str1, string str2);

public static string Concat(object arg0, object arg1, object arg2, object arg3);

public static string Concat(string str0, string str1, string str2, string str3);

相关文章:

  • SSH2实现数据库和界面的分页
  • 总结2
  • 单点登录-利用HttpModuler实现WEB程序同一时间只让一个用户实例登陆(修改)
  • Spring IOC 和 DI 理解
  • SQL Server 2008数据备份与还原(操作篇)
  • jQuery EasyUI学习资料汇总
  • lync 2010 批量启用用户
  • mysqldump学习
  • Silverlight 结合ArcGis 在地图画点
  • 摇摆的立场
  • sed 单行操作快速参考
  • 淘宝SEO珍贵笔记
  • Hadoop中HDFS和MapReduce节点基本简介
  • Java数据库连接池封装与用法
  • poj 1679 Prim判断次短路
  • 【Leetcode】101. 对称二叉树
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【前端学习】-粗谈选择器
  • 【刷算法】从上往下打印二叉树
  • Angular 响应式表单之下拉框
  • Java IO学习笔记一
  • javascript数组去重/查找/插入/删除
  • JavaScript新鲜事·第5期
  • Java知识点总结(JavaIO-打印流)
  • python docx文档转html页面
  • Python3爬取英雄联盟英雄皮肤大图
  • Vue UI框架库开发介绍
  • 关于使用markdown的方法(引自CSDN教程)
  • 诡异!React stopPropagation失灵
  • 记录:CentOS7.2配置LNMP环境记录
  • 警报:线上事故之CountDownLatch的威力
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 译自由幺半群
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • !!java web学习笔记(一到五)
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #100天计划# 2013年9月29日
  • (23)Linux的软硬连接
  • (ZT)薛涌:谈贫说富
  • (转) Android中ViewStub组件使用
  • (转)Linq学习笔记
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .chm格式文件如何阅读
  • .NET Core中Emit的使用
  • .net 发送邮件
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .net反编译工具
  • .NET连接MongoDB数据库实例教程
  • .考试倒计时43天!来提分啦!
  • :not(:first-child)和:not(:last-child)的用法
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)
  • [ vulhub漏洞复现篇 ] JBOSS AS 5.x/6.x反序列化远程代码执行漏洞CVE-2017-12149
  • [Android Pro] Notification的使用
  • [android]-如何在向服务器发送request时附加已保存的cookie数据