有时候我们要想传递可变数量的参数改怎么办??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. 运维平台cmdb开发-day2

    一 发送数据到api(Django的URL) 发送请求携带参数 requests.get(url='http://127.0.0.1:8000/api/asset/?k1=123') # <Qu ...

  2. springcloud(三) eureka集群

    上一节讲到user微服务和order微服务和eureka注册中心一起使用,那么问题来了如何注册中心挂了怎么办?ok, 注册中心集群就来了. 原理图: 注意euraka 之间是通过复制(replicat ...

  3. h3c 云计算管理平台

  4. 星型打分插件 bootstrap-rating-input

    最近帮人实现一个打分的功能,发现bootstrap-rating-input是个简单又好用的星型打分,我对其做了些定制,添加了分值说明,并修改了样式,毕竟 bootstrap 自身的黑色五角星还是不够 ...

  5. vue设置title和ioc图标

    vue设置ioc图标和title 1.ioc图标设置 在根目录中的index.html中引入代码: <link rel="shortcut icon" type=" ...

  6. 你应该使用 Django admin 的 9 个理由(转)

    你应该使用 Django admin 的 9 个理由 “问题是,我问到的每个人都持反对意见,他们认为 admin 只限于超级用户,很不灵活并且是难以定制.”—来自 Reddit 的 andybak 我 ...

  7. Consul 简介、安装、常用命令的使用

    1 Consul简介 Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置.与其他分布式服务注册与发现的方案,Consul的方案更"一站式" ...

  8. mybatis 传入集合参数遍历 查询总结

    出自:http://blog.csdn.net/u013628152/article/details/51184641 1. findByIds(List ids) 如果参数的类型是List, 则在使 ...

  9. 利用maven实现差异化配置

    回顾过去 生产环境,测试环境,开发环境在不同的环境下会有各种各样的配置,比如数据库链接地址,账户名,密码等等.不同环境下都需要配置,但是配置却又不同.以前分享过一篇文章,介绍了我之前A公司的差异化配置 ...

  10. margin+absolute布局:右栏固定主内容自适应 demo

    margin+absolute布局:右栏固定主内容自适应 demo 头部 Aside侧边栏区域 Main主内容区域 底部 #demo{width:80%;margin:auto;height:300p ...