惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Attack and Defense Labs
Attack and Defense Labs
V
Visual Studio Blog
云风的 BLOG
云风的 BLOG
爱范儿
爱范儿
Hugging Face - Blog
Hugging Face - Blog
GbyAI
GbyAI
有赞技术团队
有赞技术团队
J
Java Code Geeks
小众软件
小众软件
WordPress大学
WordPress大学
T
The Blog of Author Tim Ferriss
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
酷 壳 – CoolShell
酷 壳 – CoolShell
B
Blog
U
Unit 42
大猫的无限游戏
大猫的无限游戏
G
Google Developers Blog
I
InfoQ
Engineering at Meta
Engineering at Meta
F
Fortinet All Blogs
IT之家
IT之家
博客园 - Franky
腾讯CDC
罗磊的独立博客
雷峰网
雷峰网
M
MIT News - Artificial intelligence
博客园 - 司徒正美
A
About on SuperTechFans
SecWiki News
SecWiki News
Project Zero
Project Zero
T
Tenable Blog
The Last Watchdog
The Last Watchdog
Security Latest
Security Latest
Google DeepMind News
Google DeepMind News
C
Cyber Attacks, Cyber Crime and Cyber Security
PCI Perspectives
PCI Perspectives
博客园 - 【当耐特】
C
Check Point Blog
F
Full Disclosure
MongoDB | Blog
MongoDB | Blog
H
Help Net Security
Google Online Security Blog
Google Online Security Blog
T
Tor Project blog
T
Threat Research - Cisco Blogs
AI
AI
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Application and Cybersecurity Blog
Application and Cybersecurity Blog
美团技术团队
Spread Privacy
Spread Privacy

博客园 - shenpeng

C#中使用ExcelDataReader读取Excel文件 使用OleDbCommandBuilder时出现“Insert into 语句的语法错误”的解决方法(转) 在eclipse中使用中文JAVA api文档 .NET、ASP.NET控件及源码大汇总 60多个精品源码站 ASP.net常用代码(常用技巧备忘) C#程序转为VB.NET程序的一个小问题 Any和Some和ALL 的使用,以及交操作差操作的嵌套查询(Oracle) (转) CEIL和FLOOR函数查询(Oracle,MSSQL) (转) 字符串分割自定义函数(SQL) (转) ORACLE中巧用一条SQL 实现其它进制到十进制转换(转) 数据库优化设计方案(转) 浅谈反射与特性在接口系统中的应用(编码表转化) (转) 数字格式化(转) 将DataSet导出成XLS、XML、HTML、CSV、TSV等格式 纵表变横表经典中的经典 Web页面的数据导出excel时的格式问题(转) Access中使用SQL语句应掌握的几点技巧(转) 在SQL Server中修改sa的密码
C#中的具名参数和可选参数
shenpeng · 2024-06-16 · via 博客园 - shenpeng

具名参数和可选参数是C# framework 4.0出来的新特性。

一. 常规方法定义及调用

public void Demo1(string x, int y)
{ 
      //do something...
}
public void Main()
{
      //调用
       Demo1("similar", 22);
}

调用时,参数顺序(类型)必须与声明一致,且不可省略。

二. 可选参数的声明及调用

可选参数分为两种情况: 1. 部分参数可选;   2. 全部参数都是可选

//部分可选(x为必选,y为可选)
public void Demo2(string x, int y = 5)
{
      //do something...
}
public void Main()
{
       //调用
       Demo2("similar");       // y不传入实参时,y使用默认值5
       Demo2("similar", 10);   // y传入实参,则使用实参10
}

注: 当参数为部分可选时, 可选参数  的声明必须定义在 不可选参数 的后面(如上: y 的声明在 x 之后),不然会出现如下错误提示:

//全部可选(x,y 均为可选参数)
public void Demo3(string x = "demo", int y = 5)
{
       //do something...
}
public void Main()
{
       //调用
       Demo3();               // x,y不传入实参时,x,y使用默认值 "demo",5
       Demo3("similar");      // y不传入实参时,y使用默认值5
       Demo3("similar", 10);  // x,y都传入实参
}

注: a.  当参数全部都为可选时,参数的声明顺序可以随意定义,不分先后。

       b. 参数声明定义可以无顺序,但调用时必须与声明时的一致。

上面的调用只写的3种,其实还有一种,就是 x 使用默认值,y 传入实参,即 :  Demo3(10);

但这样调用会报错,因为Demo3的第一个参数是 string 类型,错误消息如图:

但是现在我只想传入y, 不想传入 x ,该怎么办呢,那么就要用到 C#的 具名参数。

三. 具名参数

具名参数的使用主要是体现在函数调用的时候。

public void Main()
{
       //调用
       Demo3();                // x,y不传入实参时,x,y使用默认值 "demo",5
       Demo3("similar");       // y不传入实参时,y使用默认值5
       Demo3("similar", 10);   // x,y都传入实参
       // 具名参数的使用
       Demo3(y:10);
}

通过具名参数,我们可以指定特定参数的值,这里我们通过 Demo3(y:10)就可以解决我们上面遇到的问题(x使用默认值,y使用实参)。

注: 当使用 具名参数时,调用方法可以不用管参数的声明顺序,即如下调用方式也是可以的:

在调用含有可选参数的方法时,vs中会有智能提示,提示哪些是可以选参数及其默认值,中括号表示可选[]: