簡體   English   中英

C#可選參數/需要多個

[英]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
        }

當然,我可以給我的函數這樣的評論,但是為一個非邏輯的給定參數寫評論對我來說很糟糕。

這種情況可能是一個不好的例子,但我相信我將來會再遇到這種情況。

非常感謝 :)。

編輯清除事物:
參數的可能組合:

  • 一個唯一的
  • A&(B&C)
  • 不是A和B.
  • 不是A和C(因為如果需要C,B給出了分數)

我認為你需要舊方法 - 方法重載。

// 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM