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

10

我在下面的代码中,在 i++ 的位置上收到了 Visual Studio 的 "Unreachable code detected" 消息。你能发现我做错了什么吗?

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个回答

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;
}

11

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


只需删除包含“break;”的行即可。 - wefwfwefwe

3
问题在于,因为你在循环中使用break;,且没有任何机会执行其他操作,所以i的增量(i++)将永远不会被执行。

0

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

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

0
你还可能遇到无法访问的代码,如果你使用例如Entity Framework,而没有将该引用添加到该项目中。
比如说你有几个项目,像数据层项目,域类,然后你创建一个控制台应用程序进行测试,或者其他什么,你引用你的 dbcontext 所在的位置,但是如果你不使用例如nuget并添加EF,当尝试编写循环等时,你将得到无法访问的代码...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接