使用枚举作为可选参数

卡邦(El Kabong)

在正在使用可选参数加载的应用程序中,我有几种方法,其中一些是枚举。目前,为了做到这一点,我正在编写具有类似签名类型的方法:

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

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

所以我的第一个问题是,我尚未意识到这种方法是否存在一些陷阱,但是随着时间的流逝,它会痛苦地意识到这一点,其次,是否有更合适的解决方案,或者至少是一种优雅的解决方案?

我应该说,我们控制此方法的输入,该输入在内部使用,因此我不担心有人投值-1来使工作更加顺利。

乔纳森·莱因哈特(Jonathon Reinhart)

确保您enum具有默认值(等于零),这意味着“无”或“无效”。对于您的可选参数的默认值,这将是一个适当的值。

Microsoft Code Analysis也建议这样做,CA1008:枚举值应为零

例如:

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

这样,default关键字可提供合理的值,但不会无意间引用您不希望使用的值。


例如,BCL使用相同的概念。枚举SerialPort定义用于a的停止位的数量StopBits

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

但是,该None值无效。实际上,

属性设置SerialPort为时类将引发ArgumentOutOfRangeException异常StopBitsNone

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章