c# - Visual Studio 将 "case variable:"之后的代码标记为不可访问

标签 c# switch-statement visual-studio-2015 unreachable-code

我有一个包含多个 case 的 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
    }
}

我在三个标记行上收到警告:“检测到无法访问的代码”。一个案例之后的第一个声明不可能是无法访问的,不是吗?我的问题是:

  1. 是我的代码有问题,还是警告有误?

  2. 如果 VS2015 认为代码片段不可访问,当我使用优化进行编译时它会被删除吗?如果不是,我应该忽略这个警告吗?

  3. 此警告是否意味着标记的行无法访问,或者整个案例无法访问?

PS:我知道可以在不使用 switch 的情况下重写当前代码,这将解决问题,但将来添加的代码将使使用 switch 的代码更易于维护。

编辑(由 amit dayama 请求):

private enum ConversionState
{
  Start, Between, Name, Argument, Switch
}

枚举位于具有包含最初发布代码的方法的类中。

编辑 2: 此代码所在方法的第一行是 throw new NotImplementedException();。显然,这使得 Visual Studio 将方法中每个开关中每个案例的第一行标记为不可访问,但没有别的,而且有趣的是,不是异常后的整个代码。

最佳答案

我已经检查了你的代码,一切都在我这边编译和构建,使用 VS2012。我现在 VS2015 有一些问题,错误列表窗口中有很多误报。

所以问题 1:从我的角度来看,您的代码是正确的。

问题2:不完全确定,但相信id不会为了优化去掉它。我可能是错的,但警告的原因是你解决了它而不是编译器。找到适合您的正确答案后,我会添加评论。

问题3:行不是整个case。

PS:也许您可以尝试将花括号添加到您的一些 if 和 else 语句中。我知道它们不是一个衬里所必需的,但它们可能会导致 VS2015 中的特定行为

关于c# - Visual Studio 将 "case variable:"之后的代码标记为不可访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33299577/

相关文章:

c# - 从远程计算机调用 Windows 服务

java - 为什么 case 语句不带变量?

c - 当我编译我的程序时,为什么它会提示 "label at end of compound statement"?

c++ - VS2015 不一致的编译器行为

c# - Entity Framework 6 Visual Studio 2015 Mysql 问题

c# - 如果表单未通过验证,密码字段是否应保留其值?

c# - 医生死了,如何用SQL重新安排约会?

c# - 使用c#从一个csv文件中按值拆分多个csv文件

java - Java 中的变量值开关案例

c# - 如何使用非文本信息扩充 Visual Studio C# 编辑器?