mir*_*zus 27 .net c# enums switch-statement
我见过与C++有关的帖子,但我特地要求C#.NET(4.0+).
在以下示例中是否需要默认情况?
public enum MyEnum : int
{
First,
Second
}
public class MyClass
{
public void MyMethod(MyEnum myEnum)
{
switch (myEnum)
{
case MyEnum.First: /* ... */ break;
case MyEnum.Second: /* ... */ break;
default: /* IS THIS NECESSARY??? */ break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
Jar*_*Par 36
这是一个常见的误解,即.Net枚举值仅限于枚举中声明的值.实际上,虽然它们可以是枚举的基本类型范围内的任何值(int默认情况下).例如,以下内容完全合法
MyMethod((MyEnum)42);
Run Code Online (Sandbox Code Playgroud)
此代码将在没有警告的情况下编译,并且不会打开任何case标签.
现在,您的代码是否选择处理此类方案是一项策略决策.这不是必要的,但我肯定会建议有一个.我宁愿一个添加default到每个switch上枚举我写专门为这个场景有以下模式
switch (value) {
...
default:
Debug.Fail(String.Format("Illegal enum value {0}", value));
FailFast(); // Evil value, fail quickly
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11018 次 |
| 最近记录: |