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'); //这 ...
随机推荐
- 为sublime text2 添加SASS语法高亮
以前写CSS时,都是直接写样式,没有任何的第三方工具,后面发现越是面向大网站,越难管理,上次参加完携程UED大会后,发现SASS对于前端团队多人协作和站点代码维护上很有帮助,很多同学都开始用了,我还是 ...
- Hadoop集群系类文章
http://www.cnblogs.com/xia520pi/archive/2012/04/08/2437875.html 后续文章地址:http://www.xiapistudio.com/ta ...
- static和const
转自说出static和const关键字尽可能多的作用 static关键字至少有下列n个作用: 函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次 ...
- iOS开发UI篇—UITabBarController生命周期(使用storyoard搭建)
iOS开发UI篇—UITabBarController生命周期(使用storyoard搭建) 一.UITabBarController在storyoard中得搭建 1.新建一个项目,把storyb ...
- easyui源码翻译1.32--SearchBox(搜索框)
前言 使用$.fn.searchbox.defaults重写默认值对象.下载该插件翻译源码 搜索框提示用户需要输入搜索的值.它可以结合一个菜单,允许用户选择不同的搜索类别.在用户按下回车键或点击组件右 ...
- idea快捷方式
1. [常规] Ctrl + Shift + Enter,语句完成 "!",否定完成,输入表达式时按 "!"键 Ctrl + E,最近的文件 Ctrl+Shif ...
- c#语言-多线程中的锁系统(一)
介绍 平常在多线程开发中,总避免不了线程同步.本篇就对net多线程中的锁系统做个简单描述. 目录 一:lock.Monitor 1:基础. 2: 作用域. ...
- POJ 3159 Candies 解题报告(差分约束 Dijkstra+优先队列 SPFA+栈)
原题地址:http://poj.org/problem?id=3159 题意大概是班长发糖果,班里面有不良风气,A希望B的糖果不比自己多C个.班长要满足小朋友的需求,而且要让自己的糖果比snoopy的 ...
- 兼容ie\firefox\chrome的cursor
cursor:hand 与 cursor:pointer 的效果是一样,都像手形光标. 但用FireFox浏览时才注意到使用cursor:hand在FireFox.chorme里并被支持.cursor ...
- Android获取IMSI和IMEI
IMSI是一个 唯一的数字, 标识了GSM和UMTS 网络里的唯一一个用户. 它 存储 在手机的SIM卡里,它会通过手机发送到网络上. IMEI也是一串唯一的数字, 标识了 GSM 和 UMTS网络里 ...