El *_*ong 18 c# enums optional-parameters
我在一个应用程序中有几个方法,我正在加载可选参数,其中一些是枚举.目前,为了做到这一点,我正在编写具有类似签名类型的方法:
public void SomeMethod(string myFirstParam = "", string mySecondParam = "", MyEnum myThirdParam = (MyEnum )(-1)){
if (myThirdParam != (MyEnum ) (-1))
{
//do something with it
}
}
Run Code Online (Sandbox Code Playgroud)
所以我的第一个问题是,这种方法是否存在一些我没有意识到的陷阱,但是时间会变得痛苦地意识到,其次,是否有更合适的 - 或者至少是优雅的解决方案?
我应该说我们控制了这个方法的输入,它是在内部使用的,所以我并不担心有人会使用值-1来修改工作.
Jle*_*HeP 23
我建议在这种情况下使用可以为空的枚举,如下所示:
public void SomeMethod(string myFirstParam = "",
string mySecondParam = "",
MyEnum? myThirdParam = null)
{
if (myThirdParam.HasValue)
{
var enumValue = myThirdParam.Value;
//do something with it
}
}
Run Code Online (Sandbox Code Playgroud)
你可以像这样使用它:
SomeMethod(myThirdParam: MyEnum.Something);
Run Code Online (Sandbox Code Playgroud)
Jon*_*art 19
确保您enum的默认值(等于零),即"无"或"无效".这将是可选参数的默认值的适当值.
这也是Microsoft Code Analysis推荐的,CA1008:Enums应该没有值.
例如:
enum SpeakerType
{
None = 0,
Woofer,
Midrange
Tweeter
}
Run Code Online (Sandbox Code Playgroud)
这样,default关键字提供了一个理智的值,但不会无意中引用您不希望它的内容.
例如,BCL使用相同的概念.用于a的停止位数SerialPort由StopBits枚举定义:
public enum StopBits
{
None,
One,
Two,
OnePointFive,
}
Run Code Online (Sandbox Code Playgroud)
但是该None值无效.事实上,
将属性设置
SerialPort为时,类会引发ArgumentOutOfRangeException异常.StopBitsNone
| 归档时间: |
|
| 查看次数: |
17330 次 |
| 最近记录: |