【发布时间】:2015-10-23 09:56:30
【问题描述】:
我有一个包含多种情况的 switch 语句:
ConversionState state = ConversionState.Start; // enum
for(int i = 0; i < source.Length; i ++)
{
switch(state)
{
case ConversionState.Start:
state = ConversionState.Name; // <-- warning here
name += source[i]; // source is a string
break;
case ConversionState.Name:
if(source[i] == ' ') // <-- warning here
{
name = name.ToLower();
if(name[0] == '/')
name = name.SubString(1);
state = ConversionState.Between;
}
else
name += source[i];
break;
case ConversionState.Between: // no code in this case statement, yet to be implemented
break; // <-- warning here
}
}
我在三个标记的行上收到警告:“检测到无法访问的代码”。案例之后的第一个语句不能无法访问,不是吗?我的问题是:
是我的代码有问题,还是警告有误?
如果 VS2015 认为代码 sn-p 无法访问,当我在优化编译时它会被删除吗?如果没有,我应该忽略这个警告吗?
此警告是否意味着标记的行不可达,或者整个案例不可达?
PS:我知道当前的代码可以在没有 switch 的情况下重写,这会解决问题,但是将来添加的代码将使它 - 非常 - 更容易使用 switch 来维护。
编辑(由 amit dayama 要求):
private enum ConversionState
{
Start, Between, Name, Argument, Switch
}
枚举位于具有包含原始发布代码的方法的类中。
编辑 2:
此代码所在方法的第一行是throw new NotImplementedException();。显然,这使得 Visual Studio 将方法中每个 switch 中每个 case 的第一行标记为不可访问,但没有其他内容,而且有趣的是,不是异常之后的整个代码。
【问题讨论】:
-
请粘贴更多代码。不能在我的机器上复制(VS 2015)。
-
你能显示你的枚举吗?
-
ConversionState state = ConversionState.Start;在这里您明确设置了状态,因此开关总是只执行第一种情况。 -
@LocEngineer,在第一次运行 for 循环时为 state 分配 ConversionState.Name。
-
请发布枚举的定义。也许有重叠的值或标志?
标签: c# switch-statement visual-studio-2015 unreachable-code