C# 中参数缺省值的注意事项

最近学了学C#, 我知道这样不专注不太容易深入,没办法,就当玩吧。

C#继承了C++一个很好的语音特性: 可选参数,就是一个函数的参数可以有缺省值,调用方如果没传,就用缺省值来代替,类似这样:

public void Join(string a, string b="")
{
  return a+b;
}

public void test()
{
  //这句会返回 This is;
  Join("This","is");

  //这句会返回 Ok
  Join("Ok");
}

Java至今也没有这样简洁的语法,通常只能用函数重载来代替,当缺省参数多的时候,写起来巨麻烦,Java8的Optional类也是个挺丑陋的方案,具体的这里有人详细总结了(Java Optional Parameters --from stackoverflow)

但使用时有两个注意事项:

  1. 缺省参数只能集中出现在参数列表后面,不能在前面或者中间,这很好理解,要不然如果函数有3个参数, 第二个缺省了, 然后调用方只穿了俩参数,编译器怎么知道调用方到底是想传前两个,还是第一个和第三个呢
  2. 如果有个参数是数组,还想设置缺省值,是不能设置成这样的:“string[] param = new string[0]”,即使数组元素是基本类型,也会导致编译错误:“可选参数不能初始化为非编译期常量”。究其原因,应该说数组就是个对象,本身不是个常量,空数组也不是。不过好在可以初始化为null。所以可以这样写:
public void Join(string a, string[] b=null)
{
  return b==null ? a : a+ string.Join("",b);
}

public void test()
{
  //这句会返回 This is an apple;
  Join("This",{" is"," an"," apple"});

  //这句会返回 Ok
  Join("Ok");
}

 

转载于:https://my.oschina.net/u/2012189/blog/799383

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值