C#使用参数数组
重载,是指在相同的作用域内,声明多个同名的方法。用以对不同类型或数量的参数的参数执行相同的操作。比如,可以求两个或者三个 int类型数中的最大值,我们可以编写这样的方法实现:
class Util
{
public static int Max(int num1,int num2)
{
return (num1>num2||num1=num2)?num1:num2;
} public static int Max(int num1,int num2,int num3)
{
int max=num1;
if(max<num2) max=num2;
if(max<num3) max=num3;
return max;
}
}
显然,当参数数目不确定的时候,重载不是一个好的解决办法,这时候,可以使用数组作为参数传入。以上面的问题为例:
class Util
{
public static int Max(int[] paramList)
{
if(paramList==null||paramList.length==)
{
throw new ArgumentException("Util.Max:参数值数量不足");
}
int currentMax=paramList[];
foreach(int i in paramList)
{
if(currentMax<i)
{
currentMax=i;
}
}
return currentMax;
}
}
为了使用Max方法判断2个int值得最小值,可以像下面这么写:
int[] array=new int[];
array[]=first;
array[]=second;
int max=Util.Max(array);
为了使用Max方法判断2个int值得最小值,可以像下面这么写:
int[] array=new int[];
array[]=first;
array[]=second;
array[]=third;
int max=Util.Max(array);
虽然上面的办法避免了大量的重载,但是额外多了很多代码来填充数组,但是如果用 params 关键字来声明一个params数组,一切就OK了,还是用上面的例子,用法如下:
class Util
{
public static int Max(params int[] paramList)
{
if(paramList==null||paramList.length==)
{
throw new ArgumentException("Util.Max:参数值数量不足");
}
int currentMax=paramList[];
foreach(int i in paramList)
{
if(currentMax<i)
{
currentMax=i;
}
}
return currentMax;
}
}
这时候如果要求四个int类型的数中的最大值,方法为: Util.Max(first,second,third,fourth);
编译器会自动完成填充数组的过程,再将数组的作为参数传递进去。
那么,对于类型不同的参数,同样可以使用 params object[]
关于params数组,要注意一下几点:
1、只能为一位数组使用 params 关键字,不能为多为数组使用,否则编译不能通过。
2、不能只依赖 params 关键字来重载一个方法。 params 关键字不构成方法签名的一部分,例如:
//编译时错误:重复的声明
public static int Max(int[] paramList)
...
public static int Max(params int[] paramList)
...
3、不允许为 params 数组指定 ref 或 out修饰符。
4、params 数组必须是方法的最后一个参数,没个方法中也只能有一个 params 数组参数。
//编译时错误
public static int Max(params int[] paramList,int i)
...
5、非params方法优先
public static int Max(int first,int second)
...
public static int Max(params int[] paramList)
...
对于上面的重载方法,传入两个 int 参数时,调用上面的方法,传入其它任意数量的 int 参数时,调用下面的方法。这样做并非多余,实则起到优化作用。
6、有歧义的重载编译不能通过。
//编译时错误
public static int Max(params int[] paramList)
...
public static int Max(int i, params int[] paramList)
...
如上,程序无法分辨调用哪一个方法。
C#使用参数数组的更多相关文章
- out参数,ref参数,params参数数组
params参数数组 params关键字可以为方法指定数目可变的参数.params关键字修饰的参数,可以传入任意数目的同类型参数,甚至可以不传入参数. 不过params修饰的参数必须是方法的最后一个参 ...
- C#方法的六种参数,值参数、引用参数、输出参数、参数数组、命名参数、可选参数
方法的参数有六种,分别是值参数.引用参数.输出参数.参数数组.命名参数.可选参数. 值参数 值参数是方法的默认类型,通过复制实参的值到形参的方式把数据传递到方法,方法被调用时,系统作两步操作: 在栈中 ...
- LoadRunner参数数组
参数数组提供了对一类参数集中存放的机制,其中LR内置的几个函数有:lr_paramarr_idx().lr_paramarr_len().lr_paramarr_random() 同时参数数组必须满足 ...
- 利用Apply的参数数组化来提高代码的优雅性,及高效性
利用Apply的参数数组化来提高代码的优雅性,及高效性 Function.apply()在提升程序性能方面的技巧 我们先从Math.max()函数说起,Math.max后面可以接任意个参数,最后返回所 ...
- C# - 参数数组Params
参数数组可以使用个数不定的参数调用函数,此时用params关键字定义它们. 限制:必须是函数定义中的最后一个参数:必须是同一类型的. 优点:不用在调用代码中传入数组,指定参数个数不受限制,可以不指定该 ...
- c#定义一个方法,根据存储过程名称和存储过程参数数组,执行对应的存储过程
定义一个根据存储过程名称和存储过程参数数组,执行对应的存储过程的方法.用SqlParameter[]代替存储过程需要的参数.这样就不用为每一个存储过程写一个方法了 1.首先定义一个ExcuteProc ...
- 函数,参数数组params与数组参数,结构函数
1.函数 static 返回值类型 函数名(形参1,形参2,...){ 函数体; return 返回值; } 无返回值,则static void 函数名(){ } stat ...
- loadrunner 脚本开发-参数化之将内容保存为参数、参数数组及参数值获取Part 2
脚本开发-参数化之将内容保存为参数.参数数组及参数值获取 by:授客 QQ:1033553122 ----------------接 Part 1--------------- 把内容保存到参数数组 ...
- loadrunner 脚本开发-参数化之将内容保存为参数、参数数组及参数值获取
转自:http://blog.sina.com.cn/s/blog_13cc013b50102v49c.html(查看原文) 在VuGen中默认使用{}的字符串称为参数 注意:参数必须在双引号中才能用 ...
- javascript数组元素的添加、删除与插入以及参数数组的使用
1.数组元素的添加 push方法在数组的尾部添加元素: var colorArray=new Array(); colorArray.push('red','black','yellow'); //这 ...
随机推荐
- Linux中与DNS相关的内容
Linux中与DNS有关的三个东西: 1. 主机名 2. DNS服务器 3. Host文件 Linux中和DNS有关的三个文件: 1. /etc/hostname 2. /etc/resolv.con ...
- 133. Clone Graph
题目: Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors. ...
- 【HDOJ】2054 A == B ?
这道题目起初看,so easy.再看一下ac率,注意到没有说明变量类型.显然是一道字符串的题.需要考虑+/-符号位,+.1.-.1.00010.0.+0.-00.00等情况,同时数组开到100000以 ...
- tlplayer for ios V1.1(附上截图)
此程序UI修改于虎跃在线课堂.所以极其相似. 可以播放网络视频与本地视频,不知道怎么拷贝本地视频到Ipad或iphone上看的朋友,请自己到网上看教程. 支持mms,file,rtsp,rtmp,ht ...
- WCF - Windows Service Hosting
WCF - Windows Service Hosting The operation of Windows service hosting is a simple one. Given below ...
- Nginx+Keepalived 做负载均衡器
1.安装 keepalived 1 2 3 4 5 6 7 8 9 tar zxvf keepalived-XXXX.tar.gz ./configure --prefix=/usr/local/ ...
- BZOJ2553: [BeiJing2011]禁忌
2553: [BeiJing2011]禁忌 Time Limit: 20 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 203 Solved: ...
- Mysql监控工具小集合
介绍一些常见的Mysql监控工具. Cacti Cacti是 一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具.它通过snmpget来获取数据,使用 RRDtool绘 ...
- POJ 2342 (树形DP)
Anniversary party Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3863 Accepted: 2172 ...
- 从修复 testerhome(rubychina)网站的一个 bug 学习 ruby&rails on ruby
前言 testerhome: http://testerhome.com/topics/1480 对于一个差点脱离前沿技术人,想要学习ruby,就意味着要放弃熟悉的操作系统windows,熟悉的ide ...