有时候我们要想传递可变数量的参数改怎么办??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. HDU2546题解

    解题思路:先对价格排序(顺序或倒序都可以),然后,对前n-1(从1开始.排序方式为顺序)做容量为m(卡上余额)-5的01背包(背包体积和价值相等).假设dp[i][j]表示从前i个背包中挑选体积不超过 ...

  2. node的socket.io的广播消息

    在多个客户端与服务器端建立连接后,socket.io()服务器具有一个sockets属性,属性值为所有与客户端建立连接的socket对象.可以利用该对象的send方法或emit方法向所有客户端广播消息 ...

  3. 为什么 ReactJS 不适合复杂的前端项目?

    问题一:ReactJS组件难以在复杂交互页面中复用 ReactJS中的最小复用单位是组件.ReactJS的组件比AngularJS的Controller和View 要轻量些. 每个组件只需要前端开发者 ...

  4. Julia - 函数的定义

    Julia 中的函数是将一系列参数组成的元组映设到一个返回值的对象 Julia 中定义函数的基本语法为: julia> function f(x, y) x + y end f (generic ...

  5. OrhtoMCL 使用方法

    OrthoMCL的使用分13步进行,如下: 1. 安装和配置数据库 Orthomcl可以使用Oracle和Mysql数据库,而在这里只介绍使用Mysql数据库.修改配置文件/etc/my.cnf,对M ...

  6. RocketMQ初探(四)之RocketMQ4.x版本可视化管理控制台rocketmq-console-ng搭建(Apache)

    之前有部署过3.2.6为AliBaba版本的Web监控平台(可参考之前博客 https://www.cnblogs.com/buyige/p/9395453.html),现用RocketMQ4.2.0 ...

  7. AngularJS的 $resource服务 关于CRUD操作

    AngularJs 的CRUD 操作 是指对数据库的操作: CRUD其实是数据库基本操作中的Create(创建).ReadRetrieve(读取).Update(更新).Delete(删除).而这里的 ...

  8. mysql utf8方式连接查看表数据乱码的问题

    起因 今天在公司第一次链接一个新的mysql数据库,我看到在spring里配置的jdbc里datasource.url里有配置characterEncoding=utf8..然后就用navicat开选 ...

  9. jBPM4.4 eclipse插件安装

    一.工具下载     jBPM 图形化流程设计器采用eclipse做为平台,我们可以先到jBPM官方网站下jBPM4.4,地址:http://sourceforge.net/projects/jbpm ...

  10. Docker常用命令和Dockerfile语法

    Linux安装Docker: sudo wget -qO- https://get.docker.com/ | sh 安装后只能用root管理,要给其他用户权限,使用命令: sudo usermod ...