为了简化编码,c#提供了一个特殊的关键字params,允许在调用方法时提供数量可变的实参,而不是由方法实现固定好的形参数量。先看代码吧。

using System;
using System.Linq;
using System.IO;
class HelloWorld { static void Main() {
string fullName; fullName = Combine(Directory.GetCurrentDirectory(), "bin", "config", "index.html");
Console.WriteLine(fullName); fullName = Combine(Environment.SystemDirectory, "bin", "xindex.html");
Console.WriteLine(fullName); fullName = Combine(new string[] { "C:", "data", "index.html" });
Console.WriteLine(fullName);
Console.ReadLine();
}
public static string Combine(params string[]paths){
string result=string.Empty;
foreach (string path in paths) {
result = System.IO.Path.Combine(result, path);
}
return result;
}
}

第一个Combine()调用了四个参数。第二个调用了3个参数,最后一个调用中,参数用一个数组来代替。换言之,Combine()方法接受数量可变的参数,这些参数要么是以逗号隔开,要么是单个字符串数组,前者的语法成为方法调用的”展开形式“,后者称为正常形式。

为了获得这样的效果 Combine()方法需要:

(1) 在方法的最后一个参数之前添加params关键字。

(2)将最后一个参数声明为数组。

调用System.IO.Path.Combie()方法,该方法能自动合并路径中的不同部分,并能正确使用平台的特有的目录分隔符,注意Combine()完全等价于这个方法,处理参数数量可变的参数。而不是只能处理两个。

可变参数要注意下面这些地方:

~参数数组不一定是方法的唯一参数,但必须是方法声明的最后一个参数。由于只有最后一个参数才可能是参数数组,所以方法最多只有一个参数数组。

~调用者可以指定和参数对应的零个实参,这会造成传递的参数数组包含零个数据项。

~参数数组是类型安全的,实参的类型必须兼容于参数数组元素的类型。

~调用者可以显示的使用数组,而不是以逗号分隔的参数列表,最终生成的CIL代码是一样的。

~假如目标的实现要求一个最起码的参数数量,请在方法声明中显示指定必须提供的参数。这样如果遗漏要求的参数,会导致编译器报错,而不需要依赖运行时错误处理,例:

如果一个方法要求一个或多个整型实参,那就应该使用int Max(int first,params int[] operands)来声明这个方法,而不是使用int Max(params int[] operands)来声明,这样确保至少有一个整数实参传给Max();

使用参数数组,可以将类型相同类型的,数量可变的多个参数传给方法。 在后面会讨论如何支持不同类型的,数量可变的参数。

c#基础之长度可变类型相同的参数列表的更多相关文章

  1. [Python]可变类型,默认参数与学弟的困惑

    一.学弟的困惑 十天前一个夜阑人静.月明星稀的夜晚,我和我的朋友们正在学校东门的小餐馆里吃着方圆3里内最美味的牛蛙,唱着最好听的歌儿,畅聊人生的意义.突然,我的手机一震,气氛瞬间就安静下来,看着牛蛙碗 ...

  2. Python之可变类型与不可变类型

    Python常见的数据类型有:数字 字符串 元组 列表 字典 不可变类型:数字 字符串 元组 可变类型: 列表 字典 a = 100 b = [100] def num1(x): x += x pri ...

  3. Python——可变和不可变类型数据

    什么是不可变类型? 存储空间保存的数据不允许被修改,这种数据就是不可变类型. 常见的不可变类型有: 数字类型 int, bool, float, complex, long(2.x) 字符串 str ...

  4. python 可变类型和不可变类型

    1. 什么是不可变类型变量对应的值中的数据是不能被修改,如果修改就会生成一个新的值从而分配新的内存空间.不可变类型: 数字(int,long,float) 布尔(bool) 字符串(string) 元 ...

  5. Python3基础 函数 参数为list可变类型时,使用append会影响到外部实参

             Python : 3.7.3          OS : Ubuntu 18.04.2 LTS         IDE : pycharm-community-2019.1.3    ...

  6. python基础知识5---数据类型、字符编码、文件处理

    阅读目录 一 引子 二 数字 三 字符串 四 列表 五 元组 六 字典 七 集合 八 数据类型总结 九 运算符 十 字符编码 十一 文件处理 十二 作业   一 引子 1 什么是数据? x=10,10 ...

  7. JavaScript基础回顾一(类型、值和变量)

    请看代码并思考输出结果 var scope = 'global'; function f(){ console.log(scope); var scope = 'local'; console.log ...

  8. java 基础知识二 基本类型与运算符

    java  基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...

  9. Python的可变类型与不可变类型

    Python基础知识,自己写一写比较不容易忘 Python的每个对象都分为可变和不可变,主要的核心类型中,数字.字符串.元组是不可变的,列表.字典是可变的. 对不可变类型的变量重新赋值,实际上是重新创 ...

随机推荐

  1. [转]WinForms GridListEditor - How to restore values in the auto filter row

    http://dennisgaravsky.blogspot.hk/2016/05/winforms-gridlisteditor-how-to-restore.html using System; ...

  2. 20145301&20145321&20145335实验三

    20145301&20145321&20145335实验三 这次实验我的组员为:20145301赵嘉鑫.20145321曾子誉.20145335郝昊 实验内容详见:实验三

  3. MFC学习随笔(2)

    在MFC中,有时需要多个类之间传递信息,一个共通的头文件是个不错的选择.如果在头文件中直接声明一个变量的话,势必会报出一个错误: error LNK2005: "struct my_glob ...

  4. MyEclipse 常用操作

    1.使用JREBEL插件包实现myeclipse修改类文件后无须重启 在Myeclipse中的window-preferences(搜索tomcat)->然后到tomcatx.x下的-jdk中配 ...

  5. Cron表达式备忘

    Cron表达式(在Quartz.net里面会用到) 由7段构成:秒 分 时 日 月 星期 年(可选)"-" :表示范围  MON-WED表示星期一到星期三"," ...

  6. angularjs http 请求拦截器

    /** * Created by oy on 2016/11/29. */ (function() { 'use strict'; // 创建angular模块 angular .module('ap ...

  7. 基于jquery的图片轮播 (IE8以上)

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  8. Backbone源码解析(三):Collection模块

    Collection模块式是对分散在项目中model的收集,他可以存储所有的model,构成一个集合,并且通过自身的方法统一操作model.Collection模块包装着若干对象,对象本身不具有一些方 ...

  9. 共享你的控件 -- 用NuGet包装自己的控件

    简介 在当前的开发中,NuGet的使用已经有了不小的地位,特别是应用.NET Core的UWP开发里,模块化的平台本身更是直接依赖于NuGet这一包管理器. 有时自己开发了一个不错的控组件,想通过Nu ...

  10. Java设计模式11:外观模式

    外观模式 外观模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的外观对象进行.外观模式是一个高层次的接口,使得子系统更易于使用. 医院的例子 现代的软件系统都是比较复杂的.假如把医院比作一 ...