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