c#基础之长度可变类型相同的参数列表
为了简化编码,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#基础之长度可变类型相同的参数列表的更多相关文章
- [Python]可变类型,默认参数与学弟的困惑
一.学弟的困惑 十天前一个夜阑人静.月明星稀的夜晚,我和我的朋友们正在学校东门的小餐馆里吃着方圆3里内最美味的牛蛙,唱着最好听的歌儿,畅聊人生的意义.突然,我的手机一震,气氛瞬间就安静下来,看着牛蛙碗 ...
- Python之可变类型与不可变类型
Python常见的数据类型有:数字 字符串 元组 列表 字典 不可变类型:数字 字符串 元组 可变类型: 列表 字典 a = 100 b = [100] def num1(x): x += x pri ...
- Python——可变和不可变类型数据
什么是不可变类型? 存储空间保存的数据不允许被修改,这种数据就是不可变类型. 常见的不可变类型有: 数字类型 int, bool, float, complex, long(2.x) 字符串 str ...
- python 可变类型和不可变类型
1. 什么是不可变类型变量对应的值中的数据是不能被修改,如果修改就会生成一个新的值从而分配新的内存空间.不可变类型: 数字(int,long,float) 布尔(bool) 字符串(string) 元 ...
- Python3基础 函数 参数为list可变类型时,使用append会影响到外部实参
Python : 3.7.3 OS : Ubuntu 18.04.2 LTS IDE : pycharm-community-2019.1.3 ...
- python基础知识5---数据类型、字符编码、文件处理
阅读目录 一 引子 二 数字 三 字符串 四 列表 五 元组 六 字典 七 集合 八 数据类型总结 九 运算符 十 字符编码 十一 文件处理 十二 作业 一 引子 1 什么是数据? x=10,10 ...
- JavaScript基础回顾一(类型、值和变量)
请看代码并思考输出结果 var scope = 'global'; function f(){ console.log(scope); var scope = 'local'; console.log ...
- java 基础知识二 基本类型与运算符
java 基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...
- Python的可变类型与不可变类型
Python基础知识,自己写一写比较不容易忘 Python的每个对象都分为可变和不可变,主要的核心类型中,数字.字符串.元组是不可变的,列表.字典是可变的. 对不可变类型的变量重新赋值,实际上是重新创 ...
随机推荐
- 运维自动化工具---Puppet
案例环境:-----------------------------------------------------------------主机 操作系统 IP地址 主要软件--------- ...
- Hibernate Id Generator and Primary Key
Use automate id by hibernate: If you want the tables' id be created automation. How to do it? When u ...
- Perl的多进程框架(watcher-worker)
关于perl的多进程,大家可能马上会想到Parallel::ForkManager这个模块.但是今天我们试着自己动手写一个类似的框架:) 该多进程开发模型从开源服务器框架Lighttpd发展而来,核心 ...
- go程序注册为windows服务
cmd下运行:nssm install 服务名 go打包好的exe文件 nssm下载地址:http://nssm.cc/,将下载好nssm.exe放到/windows/system32文件夹下
- diff详解,读懂diff结果
1.概述 本文将要讨论的是diff命令,diff用来比较两个文件.当然文件比较的工具很多,windows系统下面就有不错的工具可以使用,例如常用的Beyond Compare,WinMerge都是图形 ...
- Java构建工具Ant小记(一)
Ant简介 Ant是基于java的构建工具.理论上来说它类似与make工具,但是却克服了make的一些固有的缺陷. 传统的Make是基于操作系统shell的构建工具,虽然也可以基于工作的os对make ...
- 每周一书-2016年8月15日到21日(bootstrap基础教程)获奖读者公布
本次赠书 由微信昵称为“………….”的网友以10个赞获得. 请这位网友,订阅号回复你的联系方式,明天给你邮递这本书.谢谢!同时感谢<把时间当朋友>的获奖者“永梅”为<bootsrap ...
- 四则运算的实现(C++)重做
#include <iostream> using namespace std; void main() { int a0[1000],b0[1000],c0[1000],a1[1000] ...
- .net 时间戳和日期互转
1.时间戳转日期 public static DateTime IntToDateTime(int timestamp) { ,,)).AddSeconds(timestamp); } 调用: ...
- [专业名词·硬件] 2、DC\DC、LDO电源稳压基本常识(包含基本原理、高效率模块设计、常见问题、基于nRF51822电源管理模块分析等)·长文
综述先看这里 第一节的1.1简单介绍了DC/DC是什么: 第二节是关于DC/DC的常见的疑问答疑,非常实用: 第三节是针对nRF51822这款芯片电源管理部分的DC/DC.LDO.1.8的详细分析,对 ...