C# 可選參數(shù)
調(diào)用方法時,常給某個參數(shù)傳入相同的值。例如,這可能是一個布爾值,以控制方法操作中的不重要部分。具體而言,考慮下面的方法定義:
public List<string> GetWords(string sentence, bool capitalizeWords)
{
...
}
無論給capitalizeWonis參數(shù)傳入什么值,這個方法都會返回一系列string值,每個string值都是輸入句子中的一個單詞。根據(jù)這個方法的使用方式,可能需要把返回的單詞列表轉(zhuǎn)換為大寫(也許要格式化一個標題)。但大多數(shù)情況下并不需要這么做,所以大多數(shù)調(diào)用如下所示:
List<string> words = GetWords(sentence, false);
為了將這種方式變成“默認”方式,可以聲明第二個方法,如下所示:
public List<string> GetWords{string sentence) => GetWords(sentence, false);
這個方法調(diào)用第二個方法,并給capitalizeWords傳入值false。
這么做沒有任何錯誤,但可以想象在使用更多的參數(shù)時,這種方式會非常復(fù)雜。
另一種方式是把capitalizeWoids參數(shù)變成可選參數(shù)。這需要在方法定義中為參數(shù)提供一個默認值,使其成為可選參數(shù),如果調(diào)用此方法時沒有為該參數(shù)提供值,就使用默認值,如下所示:
public List<string> GetWords (string sentence, bool capitalizeWords = false)
{
...
}
如果以這種方式定義方法,就可以提供一個或兩個參數(shù),只有希望capitalizeWords是true時,才需要第二個參數(shù)。
1.可選參數(shù)的值
為方法定義可選參數(shù)的語法如下所示:
<parameterType> <parameterName> = <defaultValue>
對于<defcUltVah^>的默認值,存在一些限制。默認值必須是字面值、常量值或者默認值類型值。因此不會編譯下面的代碼:
public bool CapitalizationDefault;
public List<string> GetWords(string sentence,
bool capitalizeWords = CapitalxzationDofault)
{
...
}
為使上述代碼可以工作,CapitalizationDefiiult值必須定義為常量:
public const bool CapitalizationDefault = false;
這樣做是否有意義取決于具體情形,大多數(shù)情況下,最好提供一個字面值,就像上一節(jié)那樣。
2.Optional 特性
除了前面小節(jié)中描述的語法,還可以使用Optional特性定義可選參數(shù),如下所示:
[Optional] <parameterType> <parameterName>
此特性包含在System.Runtime.InteropServices名稱空間中。注意,如果使用這種語法,就無法為參數(shù)提供默認值。
3.可選參數(shù)的順序
使用可選值時,它們必須位于方法的參數(shù)列表末尾。沒有默認值的參數(shù)不釋放在有默認值的參數(shù)后面。因此下面的代碼是非法的:
public List<string> GetWords(bool capitalizeWords = false, string sentence)
{
...
}
其中,sentence是必選參數(shù),因此必須放在可選參數(shù)capitalizedWords的前面。
點擊加載更多評論>>