Подтвердить что ты не робот

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

Я получаю сообщение "Unreachable code detected" в 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;
    }
}
4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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