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

C# 可選參數(shù)

提問(wèn)人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-08

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

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

{

    ...

}

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

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

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

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

這個(gè)方法調(diào)用第二個(gè)方法,并給capitalizeWords傳入值false。

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

另一種方式是把capitalizeWoids參數(shù)變成可選參數(shù)。這需要在方法定義中為參數(shù)提供一個(gè)默認(rèn)值,使其成為可選參數(shù),如果調(diào)用此方法時(shí)沒(méi)有為該參數(shù)提供值,就使用默認(rèn)值,如下所示:

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

{

    ...

}

如果以這種方式定義方法,就可以提供一個(gè)或兩個(gè)參數(shù),只有希望capitalizeWords是true時(shí),才需要第二個(gè)參數(shù)。


1.可選參數(shù)的值

為方法定義可選參數(shù)的語(yǔ)法如下所示:

    <parameterType> <parameterName> = <defaultValue>

對(duì)于<defcUltVah^>的默認(rèn)值,存在一些限制。默認(rèn)值必須是字面值、常量值或者默認(rèn)值類(lèi)型值。因此不會(huì)編譯下面的代碼:

public bool CapitalizationDefault;

public List<string> GetWords(string sentence,

    bool capitalizeWords = CapitalxzationDofault)

{

    ...

}

為使上述代碼可以工作,CapitalizationDefiiult值必須定義為常量:

    public const bool CapitalizationDefault = false;

這樣做是否有意義取決于具體情形,大多數(shù)情況下,最好提供一個(gè)字面值,就像上一節(jié)那樣。

2.Optional 特性

除了前面小節(jié)中描述的語(yǔ)法,還可以使用Optional特性定義可選參數(shù),如下所示:

    [Optional] <parameterType> <parameterName>

此特性包含在System.Runtime.InteropServices名稱(chēng)空間中。注意,如果使用這種語(yǔ)法,就無(wú)法為參數(shù)提供默認(rèn)值。

3.可選參數(shù)的順序

使用可選值時(shí),它們必須位于方法的參數(shù)列表末尾。沒(méi)有默認(rèn)值的參數(shù)不釋放在有默認(rèn)值的參數(shù)后面。因此下面的代碼是非法的:

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

{

    ...

}

其中,sentence是必選參數(shù),因此必須放在可選參數(shù)capitalizedWords的前面。

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

相關(guān)視頻回答
回復(fù)(0)
返回頂部