有时候我们要想传递可变数量的参数改怎么办??Params给我们提供了一个很好的方法

Parmas:

1.只运用方法的最后一位参数

2.这个参数只能标志任意类型的一位数组

3.添加了params这个参数的方法,该方法会添加ParamArray attribute.

下面举例说明:

  static void Main(string[] args)
        {
            Console.WriteLine(GetData(new Int32[]{1,2,3,4}));
            Console.WriteLine(GetData(1,2,3,3));
            Console.ReadKey();
        }         public static  string GetData(params Int32[] intArray)
        {
           
            string result = "";
            for (int i = 0; i < intArray.Count(); i++)
            {
                result += i;
            }
            return result;
        } 结果:1234 ,1233.
Console.WriteLine(GetData(new Int32[]{1,2,3,4}));
  Console.WriteLine(GetData(1,2,3,3));
这两个使用方法时等价的。
当我们调用GetData这个方法时,CLR会查看所有Getdata()方法,发现没有具有4个参数的方法,就在查看具有ParamArray属性的Getdata方法,发现有,就调用它。就是这样!!!! 我们还可以传递不同参数类型的多个参数
 static void Main(string[] args)
        {
            //Console.WriteLine(GetData(new Int32[]{1,2,3,4}));
            //Console.WriteLine(GetData(1,2,3,3));
            GetType("nime",new Int32[]{234,342,},324);
            Console.ReadKey();
        }         public static void GetType(params object[] obj)
        { 
            foreach(object o in obj)
            {
                Console.WriteLine(o.GetType());
            }
        
        }
结果:
System.String
System.Int32[]
System.Int32 最后还有一点注意的,静态方法只能调用静态方法。就像上面一个,如果我把getdata方法的static除掉,就会提示 “非静态的方法或参数getdata()要求静态引用”
why??
理由很简单,静态方法可以直接用类名调用,是因为他直接在栈中,可直接拿来用。此时他所包含的参数也好,引用的方法也好都是未初始化的,就是说未给分配内存的,没给内存怎么调用
所以对于静态的方法,所调用的方法也必须是已经非配内存的静态方法! 总结:
params中的参数只能是这个参数只能标志任意类型的一维数组。
在调用的时候,为了避免重复的装箱拆箱操作,我们可以这样做:
public static string Concat(object o1){}
public static string Concat(object o1,object o2){}
public static string Concat(object o1,object o2,object o3){}
public static string Concat(params object[] args ){} (这是一个数组)
我们可以讲object改为我们需要的类型,以防止不必要的装箱和拆箱!!
												

Params应用的更多相关文章

  1. .NET 基础一步步一幕幕[out、ref、params]

    out.ref.params out: 如果你在一个方法中,返回多个相同类型的值的时候,可以考虑返回一个数组. 但是,如果返回多个不同类型的值的时候,返回数组就不行了,那么这个时候, 我们可以考虑使用 ...

  2. C#需知--长度可变参数--Params

    Params用于参数的数量可变的情况下,即参数的个数是未知数. 使用Params需要知道以下几点: 1.如果函数传递的参数含有多个,使用Params标记的参数数组需要放在最后 图上显示的很明确,不需要 ...

  3. params可变参数

    class Program { // params可变参数 //将实参列表中跟可变参数数组类型一致的元素都当做数组的元素去处理. //params可变参数必须是形参列表中的最后一个元素. static ...

  4. C# ref、out、params与值类型参数修饰符

    1.值类型: static void Main(string[] args) { ; ; NumVal(a, b); Console.WriteLine("a={0},b={1}" ...

  5. Connect to Database Using Custom params链接数据库配置参数说明

    使用RF的关键字Connect to Database Using Custom params链接数据库,对应的参数说明: a)     第一个参数我使用的是cx_Oracle,就写这个 b)     ...

  6. C#中 Request, Request.params , Request.querystring , Request.Form 区别 与联系用法

    C#中 Request, Request.params , Request.querystring , Request.Form 区别 与联系用法? Request.params , Request ...

  7. 《Pro Express.js》学习笔记——app.params中间件

    app.param中间件用于对URL中的参数进行获取.加工.输出,提供公有逻辑,以达到代码重构的目的. 以下示例采取三个步骤对代码进行重构,app.param中间件的作用非常明显: 不使用中间件 使用 ...

  8. 基于params,ref,out的参数问题详解

    http://www.jb51.net/article/37967.htm 最近在写程序时遇到params,ref,out 参数问题.回头有自习看了看MSDN,才巩固了基础.现在和大家分享一下.par ...

  9. IUnknown(TVarData(Params[0]).VPointer) as Range

    IUnknown(TVarData(Params[0]).VPointer) as Range 修改为  IUnknown(TVarData(Params[0]).VPointer) as WOrd_ ...

  10. C#方法中三个重要的参数:out、ref、params

    备注:适用于初学者,自学于传智播客. 1.out参数. 概念:如果在一个方法中,返回多个相同类型值的时候,可以考虑返回一数组.但是返回多个不同类型值的时候,返回数组显然不能解决问题,这时就引入out参 ...

随机推荐

  1. Vmware虚拟机linux上网问题

    1.虚拟机linux上网问题 1.1 VMware中虚拟机网络的三种设置 第一种:桥接(bridged) 第二种:NAT 第三种:Host only . 这种模式下仅主机可以上网,虚拟机不能上网. 1 ...

  2. Centos如何设置IP地址,LINUX怎么修改IP地址

    对于很多刚刚接触linux的朋友来说,如何设置linux系统的IP地址,作为第一步,下面小编以centos系统为例,给大家演示如何给centos设置IP地址,如何修改linux 系统IP地址? 步骤阅 ...

  3. JS中的定时器

    在JS中的定时器分两种: 1,setTimeout() 2,setInterval() setTimeout(): 只在指定时间后执行一次: function hello(){ alert('hell ...

  4. springmvc 使用ajx上传文件 不设置form enctype

    最近在做一个小项目 碰到这个问题 解决方案如下 1.js代码如下 获取当前form 转换为formdata ajax提交到后台 var form = $("#importForm" ...

  5. png格式图片转为svg格式图片

    png格式图片转为svg格式图片 (2012-08-30 16:24:00) 转载▼ 标签: 杂谈 分类: linux 在ubuntu下将png格式的图片转换成svg格式步骤如下:1.安装 inksc ...

  6. python开发_python中的变量:全局变量和局部变量

    如果你在为python中的变量:全局变量和局部变量头疼,我想这篇blog会给你帮助 运行效果: 代码部分: #Python中的变量:全局变量和局部变量 #在很多语言中,在声明全局变量的时候,都喜欢把全 ...

  7. 使用JAVA爬取京东商品价格

    有一件物品,你想看看它在京东下所有搜索结果的价格,要怎么办呢? 京东这个网站还是很好爬的,所有价格信息都写在了Html里面,而且跳到第二页之后,url也是有规律的,基本没有什么技术难度. 例如:想找i ...

  8. CSS——创建css

    CreateInlineStyle: function () { //创建一个内联样式表 var style = document.createElement('style'); //创建一个styl ...

  9. leetcode720

    public class Solution { public string LongestWord(string[] words) { var maxlist = new List<string ...

  10. 【微信小程序常识】如何绑定微信小程序体验者

    转自:https://blog.csdn.net/futruejet/article/details/53223826 一.操作步骤 (1)打开微信小程序公众平台->点击右边菜单[用户身份]-& ...