簡體   English   中英

使用枚舉作為可選參數

[英]Using an enum as an optional parameter

我在一個應用程序中有幾個方法,我正在加載可選參數,其中一些是枚舉。 目前,為了做到這一點,我正在編寫具有類似簽名類型的方法:

public void SomeMethod(string myFirstParam = "", string mySecondParam = "", MyEnum myThirdParam = (MyEnum )(-1)){

     if (myThirdParam != (MyEnum ) (-1))
     {
          //do something with it
     }
}

所以我的第一個問題是,這種方法是否存在一些我沒有意識到的陷阱,但是時間會變得痛苦地意識到,其次,是否有更合適的 - 或者至少是優雅的解決方案?

我應該說我們控制了這個方法的輸入,它是在內部使用的,所以我並不擔心有人會使用值-1來修改工作。

我建議在這種情況下使用可以為空的枚舉,如下所示:

public void SomeMethod(string myFirstParam = "", 
                       string mySecondParam = "", 
                       MyEnum? myThirdParam = null)
{
   if (myThirdParam.HasValue)
   {
      var enumValue = myThirdParam.Value;
      //do something with it
   }
}

你可以像這樣使用它:

SomeMethod(myThirdParam: MyEnum.Something);

確保您的enum具有默認值(等於零),表示“無”或“無效”。 這將是可選參數的默認值的適當值。

這也是Microsoft Code Analysis推薦的, CA1008:Enums應該沒有值

例如:

enum SpeakerType
{
    None = 0,
    Woofer,
    Midrange
    Tweeter
}

這樣, default關鍵字提供了一個理智的值,但不會無意中引用您不希望它的內容。


例如,BCL使用相同的概念。 用於SerialPort的停止位數由StopBits枚舉定義:

public enum StopBits
{
  None,
  One,
  Two,
  OnePointFive,
}

但是None值無效。 事實上,

StopBits屬性設置為None時, SerialPort類會拋出ArgumentOutOfRangeException異常。

關於什么 :

enum MyEnum {
   MISSING = -1,
   FirstValue,
   SecondValue,
   ...
}

public void SomeMethod(string myFirstParam = "", string mySecondParam = "", MyEnum myThirdParam = MISSING) {
     if (myThirdParam != MISSING)
     {
          //do something with it
     }
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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