位置:首頁 > 軟件操作教程 > 編程開發(fā) > C# > 問題詳情

C# 可選參數(shù)

提問人:劉團圓發(fā)布時間:2020-12-08

    調用方法時,常給某個參數(shù)傳入相同的值。例如,這可能是一個布爾值,以控制方法操作中的不重要部分。具體而言,考慮下面的方法定義:

public List<string> GetWords(string sentence, bool capitalizeWords)

{

    ...

}

    無論給capitalizeWonis參數(shù)傳入什么值,這個方法都會返回一系列string值,每個string值都是輸入句子中的一個單詞。根據(jù)這個方法的使用方式,可能需要把返回的單詞列表轉換為大寫(也許要格式化一個標題)。但大多數(shù)情況下并不需要這么做,所以大多數(shù)調用如下所示:

    List<string> words = GetWords(sentence, false);

為了將這種方式變成“默認”方式,可以聲明第二個方法,如下所示:

    public List<string> GetWords{string sentence) => GetWords(sentence, false);

這個方法調用第二個方法,并給capitalizeWords傳入值false。

這么做沒有任何錯誤,但可以想象在使用更多的參數(shù)時,這種方式會非常復雜。

另一種方式是把capitalizeWoids參數(shù)變成可選參數(shù)。這需要在方法定義中為參數(shù)提供一個默認值,使其成為可選參數(shù),如果調用此方法時沒有為該參數(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的前面。

繼續(xù)查找其他問題的答案?

相關視頻回答
回復(0)
返回頂部