用C#中的params关键字实现方法形参个数可变

例如,下面代码:


代码如下:

class Program
{
static void Main(string[] args)
{
Console.WriteLine(Sum(1));
Console.WriteLine(Sum(1, 2, 3));
Console.WriteLine(Sum(1, 2, 3, 4, 5));
Console.ReadKey();
}
private static int Sum(params int[] values)
{
int sum = 0;
foreach (int value in values)
sum += value;
return sum;
}
}

实现了一个Sum方法,用于接收一组整数,并返回它们的和。参数values被加上params关键字后,在调用时可以在实参列表中列举出这组整数中的每个元素,非常方便。
关于params关键字的用法,需要注意以下几点:
1. params只能用于一维数组,不能用于多维数组和诸如ArrayList、List<T>等任何类似于数组的集合类型。
2. 被加上params关键字的形参,必须是形参列表中最后一个形参,并且方法声明中只允许一个 params 关键字。
3. 用params关键字的方法,有三种调用形式:
第一种,列举出数组各元素:Sum(1,2,3),这也是最常用的形式;
第二种,像没有加params关键字的数组形参那样,用数组名做实参:Sum(new int[]{1,2,3})或int n=new int[]{1,2,3};Sum(n);;
第三种,加params关键字的参数在调用时可以省略:Sum();//返回0;这种方式有时可以少定义一个方法重载,但当明确定义了重载int Sum()时,编译器会优先调用int Sum(),而不是Sum(params int[] values)。而且省略params型参数,方法内部仍会new一个元素个数为0的数组,效率略查。
第四种,不省略params型参数,用null代替,效率比第三种略高,因为其内部不会new这个数组。

时间: 2012-01-10

asp.net(c#)ref,out ,params的区别

NO.1 params 一个可以让方法(函数)的拥有可变参数的关键字. 原则:在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字. 示例(拷贝到vs2005中即可用,下面不再说明) 复制代码 代码如下: public partial class Form1 : Form { public static void UseParams(params int[] list) { string temp = ""; for (int i

C# 运用params修饰符来实现变长参数传递的方法

可变数目参数的好处就是在某些情况下可以方便地对参数个数不确定情况的实现,例如计算任意数字的加权和,链接任意字符串为一个字符串等.看下例子: 复制代码 代码如下: public class Test2 {     public static void Main()     {         ShowName("小A"); //这里可以指定任意长度的参数也可以传递不同类型的参数,但要改参数类型为object        ShowName("小A", "小B

c# 可变数目参数params实例

一般来说,参数个数都是固定的,定义为集群类型的参数可以实现可变数目参数的目的,但是.NET提供了更灵活的机制来实现可变数目参数,这就是使用params修饰符.可变数目参数的好处就是在某些情况下可以方便地对参数个数不确定情况的实现,例如计算任意数字的加权和,链接任意字符串为一个字符串等.看下例子: 复制代码 代码如下: public class Test2 { public static void Main() { ShowName("小兵"); ShowName("小王&qu

C#中Params的用法

本文实例讲述了C#中Params的用法.分享给大家供大家参考.具体方法如下: 复制代码 代码如下: using System; namespace Params {     class Program     {         static void Main(string[] args)         {             PrintMany("Hello", "World");         }           static void Print

C#难点逐个击破(3):params数组参数

在方法声明中只允许一个paras关键字,并且该关键字只能为最后一个. 复制代码 代码如下: using System; /****************************** * Chapter:C#难点逐个击破(三) * Author:王洪剑 * Date:2010-1-16 * Blog:http://www.51obj.cn/ * Email:walkingp@126.com * Description:数组参数params的使用 * ***********************

c#的params参数使用示例

复制代码 代码如下: class 参数    {        public void doSome(string str,params int[] values){            if (values != null && values.Length > 0)            {                for (var i = 0; i < values.Length; i++)                {                    C

用C#的params关键字实现方法形参个数可变示例

个人认为,提供params关键字以实现方法形参个数可变是C#语法的一大优点.在方法形参列表中,数组类型的参数前加params关键字,通常可以在调用方法时代码更加精练. 例如,下面代码: class Program { static void Main(string[] args) { Console.WriteLine(Sum(1)); Console.WriteLine(Sum(1, 2, 3)); Console.WriteLine(Sum(1, 2, 3, 4, 5)); Console.

PHP自定义函数获取搜索引擎来源关键字的方法

本文实例讲述了PHP自定义函数获取搜索引擎来源关键字的方法.分享给大家供大家参考,具体如下: 获取搜索引擎来源关键字的函数: function getKeywords() { // 搜索引擎关键字映射 static $host_keyword_map = array( 'www.baidu.com' => 'wd', 'v.baidu.com' => 'word', 'image.baidu.com' => 'word', 'news.baidu.com' => 'word', '

使用正则表达式屏蔽关键字的方法

[问题]关键字屏蔽是社交类软件必做的功能,当然了,一般来讲都是产品的中后期来做:不同产品规定不一样,跟着产品运营走,可以的 [方法]我们从技术的角度来看到这个问题,实现一个功能后者说实现一个需求,其方法是多种多样的,重点是找到适合我们当下产品的:比如:我们可以在后端进行数据处理之后,传递到前端:也可以在前端进行数据处理:这里我们要说的就是前端的JS处理方法,后端的php处理方法 [JS方法] // 进行屏蔽的文字 var str = '小丽.小明和小红是校长的学生:在这个小家庭里面,校长就是我们

Java中synchronized关键字修饰方法同步的用法详解

Java的最基本的同步方式,即使用synchronized关键字来控制一个方法的并发访问. 每一个用synchronized关键字声明的方法都是临界区.在Java中,同一个对象的临界区,在同一时间只有一个允许被访问. 静态方法则有不同的行为.用synchronized关键字声明的静态方法,同时只能够被一个执行线程访问,但是其他线程可以访问这个对象的非静态的synchronized方法.必须非常谨慎这一点,因为两个线程可以同时访问一个对象的两个不同的synchronized方法,即其中一个是静态s

PHP屏蔽过滤指定关键字的方法

本文实例讲述了PHP屏蔽过滤指定关键字的方法.分享给大家供大家参考.具体分析如下: 实现思路: 一.把关键字专门写在一个文本文件里,每行一个,数量不限,有多少写多少. 二.PHP读取关键字文本,存入一个数组 三.遍历关键字数组,挨个用strpos函数去看看内容有没有关键字,如果有,返回true,没有则返回false PHP代码如下: 复制代码 代码如下: /* PHP中用strpos函数过滤关键字 */ // 关键字过滤函数 function keyWordCheck($content){ //

PHP屏蔽关键字实现方法

本文介绍了PHP屏蔽关键字实现方法,一共有两种实现方式,具体如下: 第一种方法 思路 用正则去匹配关键字,把关键字用别的字符替换 $str = "/你大爷|你麻痹|什么玩意|SB|你他妈/"; // 关键字正则字符串 $string = "你他妈干什么玩意了 SB"; // 文本字符串 echo preg_replace($str, "*", $string); //preg_replace() 执行一个正则表达式的匹配和替换 OK 方法一结束 

asp.net MVC利用自定义ModelBinder过滤关键字的方法(附demo源码下载)

本文实例讲述了MVC利用自定义ModelBinder过滤关键字的方法.分享给大家供大家参考,具体如下: 前面一篇主要讲解了如何利用ActionFilter过滤关键字,这篇主要讲解如何利用自己打造的ModelBinder来过滤关键字. 首先,我们还是利用上一篇<asp.net MVC利用ActionFilterAttribute过滤关键字的方法>中的实体类,但是我们需要加上DataType特性,以便于我们构造的ModelBinder通过DataTypeName识别出来: using System

asp.net MVC利用ActionFilterAttribute过滤关键字的方法

本文实例讲述了asp.net MVC利用ActionFilterAttribute过滤关键字的方法.分享给大家供大家参考,具体如下: 在开发过程中,有时候会对用户输入进行过滤,以便保证平台的安全性.屏蔽的方法有很多种,但是今天我说的这种主要是利用MVC中的ActionFilterAttribute属性来实现.由于MVC天然支持AOP,所以我们这种过滤方式正好利用了MVC的这种特性. 下面请看步骤: 首先,当用户输入自己的名称的时候,带有类似<BR>的内容的时候,由于MVC默认是需要验证内容的,

php类中的$this,static,final,const,self这几个关键字使用方法

本篇文章主要分项了一下关于php类中的$this,static,final,const,self这几个关键字使用方法. $this $this表示当前实例,在类的内部方法访问未声明为const及static的属性时,使用$this->value='phpernote';的形式.常见用法如: $this->属性 $this->方法 举例如下: <?php class MyClass{ private $name; public function __construct($name){