編輯:
如果你在這裏尋找快速的答案:這是可能的,但功能的概述並不顯示我正在尋找的結果。是否有可能在C#中有條件參數?
答案'Code Contracts' by Aidin給出了一個錯誤,如果你省略了一個可選的,但是必需的(因爲...)參數。這似乎是迫使用戶使用它的最簡單方式,但需要對該函數的用戶進行一些解釋。
答案'Place Logic in Class' by Shawn Holzworth符合我的需求,很容易地向用戶顯示功能的選項,但它需要不同的方法和大量的代碼重寫。
我試圖創建一個接受不同參數集的函數。在代碼中,我檢查給定的參數集合,並根據我對URL進行的操作來獲得一組包含來自保險公司的個人信息的值(這就是爲什麼沒有其他代碼)。 Google上的搜索沒有給出任何關於使參數彼此有條件的結果,因此我不確定這甚至是可能的。
基本的想法是有一個函數調用是這樣的:
dobFormatted
, infodateFormatted
, (BSN | insuranceID | lastname | postalcode, Homenummer[, Homenummeradd])
[, insuranceType]
允許在這些方式中使用的功能:
dobFormatted, infodateFormatted, BSN
dobFormatted, infodateFormatted, BSN, insuranceType
dobFormatted, infodateFormatted, insuranceID
dobFormatted, infodateFormatted, insuranceID, insuranceType
dobFormatted, infodateFormatted, lastname
dobFormatted, infodateFormatted, lastname, insuranceType
dobFormatted, infodateFormatted, postalcode, Homenummer
dobFormatted, infodateFormatted, postalcode, Homenummer, insuranceType
dobFormatted, infodateFormatted, postalcode, Homenummer, Homenummeradd
dobFormatted, infodateFormatted, postalcode, Homenummer, Homenummeradd, insuranceType
因此,代碼會強制調用該函數包含所需的信息。我知道這可以通過創建需要不同參數集的函數的多個版本並返回當前函數的輸出來實現。不過,我認爲這會使代碼更少可讀性和可維護性。此外,還有3種方法僅使用3個字符串完成該功能,但輸出取決於第3個參數。
目前我有這樣的代碼:
public static string getVecozoURL(string dobFormatted, string infodateFormatted,
string BSN = "", string insuranceID= "", string lastname= "",
string postalcode = "", int Homenummer = 0, string Homenummeradd = "",
string insuranceType = "Both") {
string URL= "";
if (FCelfproef.BSN(BSN)) {
// Do stuff
} else if (!insuranceID.IsEmpty()) {
// Do stuff
} else if (postalcode .Length > 4 && Homenummer > 0) {
// Do stuff
} else if (!lastname.IsEmpty()) {
// Do stuff
}
// Do some other stuff
return URL;
}
有沒有一種簡單的方法來迫使這還是我來通知要使用此有關的功能的方式,所有的人作品?
單獨重載。 – SLaks
@SLaks大部分參數都是字符串,有些是聯合值。在這種情況下,重載不起作用。 –