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'); //这 ...
随机推荐
- MD5算法步骤详解
转自MD5算法步骤详解 之前要写一个MD5程序,但是从网络上看到的资料基本上一样,只是讲了一个大概.经过我自己的实践,我决定写一个心得,给需要实现MD5,但又不要求很高深的编程知识的童鞋参考.不多说了 ...
- 如何使用 Java8 实现观察者模式?(上)
[编者按]本文作者是 BAE 系统公司的软件工程师 Justin Albano.在本篇文章中,作者通过在 Java8 环境下实现观察者模式的实例,进一步介绍了什么是观察者模式.专业化及其命名规则,供大 ...
- spring mvc 使用及json 日期转换解决方案
http://blog.csdn.net/z69183787/article/details/40375479
- 快速排序法QuickSort
/** * * @author Administrator * 功能:交换式排序之快速排序 */ package com.test1; import java.util.Calendar; publi ...
- Android ListView动态更新数据
ListView就是可以显示一行行Item的控件,有时候数据非常多,通常需要分页显示,但为了减少用户的输入,我们可以动态更新ListView,把下一页要显示的数据的添加到当前ListView中. 先看 ...
- Eclipse问题解决方案,不断更新
执行“software update”时出现:Error retrieving "feature.xml"... 执行“software update”时出现:Error retr ...
- SpeeDO —— 并行深度学习系统
SpeeDO —— 并行深度学习系统 摘要: 最近,AlphaGo又带起了一波深度学习的热潮.深度学习在很多领域都大幅提高了模型的精度,使得很多以前在实验室中的技术得以运用到日常的生活之中.然而, ...
- hdu4681String
http://acm.hdu.edu.cn/showproblem.php?pid=4681 枚举A串和B串包含C串的区间 枚举区间端点算左右两端最长公共子序 #include <iostre ...
- mac 修改密码后 频繁输入钥匙串问题修复方法
就一句话就是 清空钥匙串缓存 下面是具体方法 进入硬盘目录-->资源库-->Keychains 删除里面的文件夹(这个文件夹里面有 keychain-2.db keychain-2.db- ...
- SharePoint 2013版本功能对比介绍
转:http://www.fengfly.com/plus/view-213720-1.html 在SharePoint使用中,经常纠结于版本问题,SharePoint 2013主要有免费的Found ...