编辑:
如果您到这里寻找快速答案:可以这样做,但该功能的概述并未显示我正在寻找的结果。
如果您省略了可选但必需的(因为...)参数之一,Aidin的答案“代码合同”会给出错误。这似乎是强制用户使用它的最简单方法,但需要对函数的用户进行一些解释。
Shawn Holzworth的答案“Place Logic in Class”符合我轻松向函数用户展示他们有哪些选项的需求,但它需要不同的方法和大量的代码重写。
我正在尝试创建一个接受不同参数集的函数。在代码中,我检查给出了哪些参数集,并基于此对 URL 做一些事情,以便从保险公司接收一组包含个人信息的值(这就是没有其他代码的原因)。在 Google 上进行的搜索没有给出使参数相互有条件的结果,因此我不确定它是否可能。
基本上这个想法是有一个这样的函数调用:
dobFormatted
, infodateFormatted
, (BSN | insuranceID | lastname | postalcode, Homenummer[, Homenummeradd])
[, insuranceType]
允许以下列方式使用该功能:
dobFormatted, infodateFormatted, BSNdobFormatted, infodateFormatted, BSN, insuranceTypedobFormatted, infodateFormatted, insuranceIDdobFormatted, infodateFormatted, insuranceID, insuranceTypedobFormatted, infodateFormatted, lastnamedobFormatted, infodateFormatted, lastname, insuranceTypedobFormatted, infodateFormatted, postalcode, HomenummerdobFormatted, infodateFormatted, postalcode, Homenummer, insuranceTypedobFormatted, infodateFormatted, postalcode, Homenummer, HomenummeradddobFormatted, infodateFormatted, postalcode, Homenummer, Homenummeradd, insuranceType
因此代码强制对函数的调用包含所需的信息。我知道这可以通过创建需要不同参数集的函数的多个版本并返回当前函数的输出来实现。但是我认为这会使代码的可读性和可维护性降低。此外,也有 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;
}
是否有一种简单的方法来强制执行此操作,或者我是否必须告知所有将要使用此功能的人该功能的工作方式?