C#中的 具名参数 和 可选参数

具名参数 和 可选参数 是 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);

但这样调用会报错,因为Demo的第一个参数是 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中会有智能提示,提示哪些是可以选参数及其默认值,中括号表示可选[]:

时间: 2024-10-18 14:01:45

C#中的 具名参数 和 可选参数的相关文章

【工作中遇到的问题】可选参数必须为引用类型、可以为 null 的类型或声明为可选参数。 参数名: parameters

今天上班来发现收到新的报错邮件,里面出现一个新的报错. “Method(Int32, Int32, Int32, Int32, Int32, Int32, System.String, System.String)”的不可以为 null 的类型“System.Int32”的参数“param”” 我这个方法本来是要传8个参数,没有的就传默认值. 现在一看报错详情,原来是异步发来的时候,请求参数没传全. 这个时候整个人傻逼了.....为神马没传默认参数.... 正想气势冲冲的找前端去理论.这时脑袋灵

C#4.0 具名参数 和 可选参数

C# 4.0中的可缺省参数 C# 4.0现在对方法,构造器,以及索引器支持使用可缺省的参数(注:VB支持可缺省参数可是有年头了). 当参数的默认值作为声明的一部分被指定的时候,参数就是可缺省的.例如,下面这个方法接受2个参数,一个"category" 字符串参数,另一个"pageIndex"整数参数."pageIndex"参数有一个默认值 0,它因此是一个可缺省的参数: 当调用上面的方法时,我们可以显式地传递2个参数给它: 或者我们可以省略掉传递

【转】C#具名参数和可选参数

源地址:https://www.cnblogs.com/similar/p/5006705.html 另:可选参数的一个陷阱 参考:https://www.cnblogs.com/still-windows7/p/kexuancanshuxianjing.html 原文地址:https://www.cnblogs.com/haizine/p/10567291.html

C#中可选参数和具名参数的使用

具名参数 和 可选参数 是 C# 4.0 提出来的新特性 一,可选参数分为:部分可选.全部可选 1,声明 public class Dogs { public string Name { get; set; } public string Age { get; set; } //1,name为必选参数,age为可选参数,如果有必选参数,那么可选参数必须定义在必选参数后 //可选参数之后必然为可选参数 //如果都是可选参数,那么可以放第一位 public void Says(string name

可选参数、命名参数、.NET的特殊类型、特性

1.可选参数和命名参数    1.1可选参数        语法:            [修饰符] 返回类型 方法名(必选参数n,可选参数n)        注意:            1.必选参数可以不存在,也可以有多个:可选参数可以有1个或多个            2.可选参数必须放在必选参数之后            3.可选参数在定义时需要赋初始值            4.可选参数之间也需要使用,进行分隔            5.调用可选参数时,不能跨参数赋值    1.2命名

c#方法重载,可选参数,命名参数。

其实这里没什么可说哦,c++的语法大同小异.先看一段代码. class Program { public static void Test(int a) { Console.WriteLine("只有一个参数a=={0}", a); } public static void Test(int a, int b = 5) { Console.WriteLine("有两个参数a=={0},b=={1}", a, b); } static void Main() { Te

ylbtech-LanguageSamples-NamedAndOptional(命名和可选参数)

ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-NamedAndOptional(命名和可选参数) 1.A,示例(Sample) 返回顶部 命名和可选参数 C# 4.0 支持命名和可选参数. 此程序演示如何声明一个具有命名和可选参数的方法,以及如何通过使用参数的默认值和通过显式命名特定参数来调用该方法. 1.B,示例代码(Sample Code)返回顶部 1.B.1, Program.cs using System; using S

可选参数

可选参数 在 js 里,声明一个函数可以定制多个参数,与此同时,你在调用该函数的时候不需要传入所有的参数,它就能正常执行,只不过这些参数默认就是undefined而已.所以似乎 js 的函数天生就带有可选参数这个功能,只不过在你不进行定制的时候它们都具有一个 "统一" 的值罢了.但,我们也知道,除非函数里就实现了针对某个参数为undefined时的行为,让参数为undefined是比较危险的.该如何实现函数内的可选参数,我们将用 js 里的构造方法来举例(假如我们要实现一个 Perso

MSSQL中存储过程的可选参数的定义和使用

可选参数的存在,可以极大的降低代码的重复冗余.在数据库开发中,也是如此.现在针对MSSQL中存储过程的可选参数的定义和使用进行基本的介绍,留作备忘. #准备工作: 在db_test中建立一张测试表T_test: USE db_test; CREATE TABLE dbo.T_test ( Id  INT  IDENTITY(1,1) NOT NULL ,Name  NVARCHAR(20)  NOT NULL ,Sex  BIT  DEFAULT(0) ); 插入一些数据: INSERT INT