[英]C# Optional parameters / multiple required
是否可以一起獲得2個可選參數的要求? 這是一個例子:
public void ParamChoise(string A, bool B = false, string C = "Y")
{
// Stuff here
}
其中B是可選的,如果B為真,我希望函數需要C。 從我的邏輯來看:
public void ParamChoise(string A, (bool B = false, string C = "Y"))
無法通過谷歌搜索找到任何東西。 對我來說,一種可能的方式是:
/// <summary>
/// If you want behaviour XXX to be enabled, please enter "C" for usage.
/// </summary>
/// <param name="A"></param>
/// <param name="C"></param>
public void ParamChoise(string A, string C = "Y")
{
// Stuff here
}
當然,我可以給我的函數這樣的評論,但是為一個非邏輯的給定參數寫評論對我來說很糟糕。
這種情況可能是一個不好的例子,但我相信我將來會再遇到這種情況。
非常感謝 :)。
編輯清除事物:
參數的可能組合:
我認為你需要舊方法 - 方法重載。
// b = true
public void ParamChoise(string A, string C)
// b = false
public void ParamChoise(string A)
他們應該撥打您原件的私人版本
private void ParamChoiseInternal(string A, bool B = false, string C = "")
你應該確保你給2個公共方法一個准確傳達其含義的名稱 - 這將有助於程序員(可能你,我知道)為他們當前的狀態調用正確的方法。
更新后
與上面相同,名稱反映了要求,您仍然可以調用原始的私有方法。 重載確保您的一致性
public void AOnly(string A)
public void AAndBAndC(string A, bool B, string C)
苦苦掙扎破譯這兩個:
沒有A和B沒有C !!!
不是A和C(因為B代表需要C的點)
您可以使用命名參數
public void ParamChoise(string A = "", bool B = false, string C = "Y") {...}
// call it
ParamChoise(A: "123");
ParamChoise(C: "123");
ParamChoise(C: "123", A: "123");
ParamChoise(B: true, C: "123", A: "123");
我發現這對於具有許多可選參數的方法非常有用。
使用顯式參數名稱指定,您可以在以后隨處添加新的可選參數,而不會破壞現有代碼。
從我可以收集到的你想要C到可選的時候b是假的; 作為方法超載的練習,我認為你得到的最接近的是:
void ParamChoise(string A, string C)
void ParamChoise(string A, bool B = true, string C = "Y")
您仍然需要在調用者中決定是否提供Bool ...這使得它現在無法實現:
void ParamChoiseBIsFalse(string A, string C)
void ParamChoiseBIsTrue(string A, string C = "Y")
您剛剛獲得了無法直接轉換為簡單重載的復雜邏輯。 您可以將該邏輯放在被調用者或調用者中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.