10

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

5 回答 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;
}
于 2009-09-25T09:59:06.910 回答
11

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

于 2009-09-25T09:57:40.580 回答
3

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

于 2009-09-25T09:59:54.677 回答
0

尽管您的问题已解决,但我需要告诉您这一点,您可以只使用 CreateSubKey() 方法来达到您的目的。我认为这是一个更好的选择。:)

//Creates a new subkey or opens an existing subkey for write access.
var ourKey = Registry.CurrentUser.CreateSubKey("Software\\Resources\\Shared");
于 2012-05-12T21:02:40.430 回答
0

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

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

于 2013-03-13T23:15:36.127 回答