【问题标题】:C# Unreachable code detected检测到 C# 无法访问的代码
【发布时间】:2010-12-01 09:04:02
【问题描述】:

我在下面代码中的 i++ 点在 Visual Studio 中收到“检测到无法访问的代码”消息。你能看出我做错了什么吗?

try
{
    RegistryKey OurKey = Registry.CurrentUser;
    OurKey.CreateSubKey("Software\\Resources\\Shared");
    OurKey = OurKey.OpenSubKey("Software\\Resources\\Shared", true);
    for (int i = 0; i < cmbPaths.Items.Count; i++) //<---- problem with i
    {
        OurKey.SetValue("paths" + i, cmbPaths.Items[i]);
        break;
    }
}

【问题讨论】:

    标签: c# unreachable-code


    【解决方案1】:

    问题在于这实际上不是一个循环。你对休息没有任何条件,所以你可以等效地写一些类似的东西

    if(cmbPath.Items.Count > 0)
    {
       OurKey.SetValue("paths" + 0, cmbPaths.Items[0]);
    }
    

    或者你必须用类似的东西来纠正

    for (int i = 0; i < cmbPaths.Items.Count; i++) 
    {
       OurKey.SetValue("paths" + i, cmbPaths.Items[i]);
    
       if(someConditionHolds)
          break;
    }
    

    【讨论】:

      【解决方案2】:

      你在第一次迭代结束之前就跳出了循环。

      【讨论】:

      • 删除break;这一行
      【解决方案3】:

      问题在于,因为你 break; 在循环中没有机会做任何其他事情,所以永远不会达到 i (i++) 的增量。

      【讨论】:

        【解决方案4】:

        虽然你的问题已经解决了,但我还是要告诉你, 您可以只使用 CreateSubKey() 方法来达到您的目的。我认为这是一个更好的选择。 :)

        //Creates a new subkey or opens an existing subkey for write access.
        var ourKey = Registry.CurrentUser.CreateSubKey("Software\\Resources\\Shared");
        

        【讨论】:

          【解决方案5】:

          如果您使用例如实体框架,并且您没有将该引用添加到该项目,您也可能最终获得无法访问的代码。

          假设您有几个项目,例如数据层项目、域类,然后您创建一个控制台应用程序用于测试或其他任何内容,并引用您的 dbcontext 所在的位置,但如果您不使用 nuget 并添加到 EF ,当你尝试编写循环等时,你会得到无法访问的代码......

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-05-22
            • 2011-05-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多