检测到C#无法访问的代码

时间:2009-09-25 09:56:48

标签: c# unreachable-code

我在下面的代码中的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;
    }
}

5 个答案:

答案 0 :(得分:24)

问题是这实际上不是一个循环。你在休息时没有任何条件,所以你可以等同地写一些像

这样的东西
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;
}

答案 1 :(得分:11)

在第一次迭代结束之前你已经脱离了循环。

答案 2 :(得分:3)

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

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