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");
}
相關文章
相關標籤/搜索