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

C# Unreachable code detected

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

1
2
3
4
5
6
7
8
9
10
11
12
13
try
{
    RegistryKey OurKey = Registry.CurrentUser;
    OurKey.CreateSubKey("Software\
esources\\Shared"
);
    OurKey = OurKey.OpenSubKey("Software\
esources\\Shared"
, true);
    for (int i = 0; i < cmbPaths.Items.Count; i++) //<---- problem with i
    {
        OurKey.SetValue("paths" + i, cmbPaths.Items[i]);
        break;
    }
}

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

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

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

1
2
3
4
5
6
7
for (int i = 0; i < cmbPaths.Items.Count; i++)
{
   OurKey.SetValue("paths" + i, cmbPaths.Items[i]);

   if(someConditionHolds)
      break;
}


您将在第一次迭代结束之前脱离循环。


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


如果使用say(例如实体框架),并且没有将该引用添加到该项目中,那么最终也会得到无法访问的代码。

假设您有几个项目,比如数据层项目、域类,然后您创建了一个控制台应用程序用于测试或其他任何内容,并引用了dbContext所在的位置,但如果不使用say nuget和外接程序ef,则在尝试编写循环时将无法访问代码等…


尽管你的问题解决了,我还是要告诉你,您只需使用createSubkey()方法就可以了。我觉得这是个更好的选择。:)

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