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

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

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)app

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

  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");
}
相关文章
相关标签/搜索