С недостижимого кода# обнаружении

Я получаю сообщение "обнаружен недостижимый код" в Visual Studio в точке I++ в моем коде ниже. Ты можешь определить, что я сделал не так?

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

5 ответов


проблема в том, что это на самом деле не цикл. У вас нет никаких условий в перерыве, чтобы вы могли эквивалентно написать что-то вроде

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

вы выходите из цикла до конца первой итерации.


проблема в том, что вы break; в цикле без каких-либо шансов сделать что-либо еще, приращение i (i++) никогда не будет достигнут.


хотя ваша проблема решена, я должен сказать вам это, вы можете просто использовать метод CreateSubKey () для своей цели. Думаю, это лучший выбор. :)

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

вы также можете получить недостижимый код, если вы используете say, например Entity Framework, и вы не добавили эту ссылку на этот проект.

скажем, у вас есть несколько проектов, таких как проект слоя данных, классы домена, затем вы создаете консольное приложение для тестирования или что-то еще, и вы ссылаетесь, где находится ваш dbcontext, но если вы не используете say nuget и добавить в EF, вы получите код недостижимым при попытке написать цикл и т. д...