10 votes

C# Code inaccessible détecté

J'obtiens un message "Unreachable code detected" dans Visual Studio au point i++ dans mon code ci-dessous. Pouvez-vous identifier ce que j'ai fait de mal ?

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

24voto

Juri Points 14330

Le problème est qu'il ne s'agit pas d'une boucle. Vous n'avez pas de condition sur la pause, donc vous pourriez écrire quelque chose comme

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

Sinon, vous devez corriger avec quelque chose comme

for (int i = 0; i < cmbPaths.Items.Count; i++) 
{
   OurKey.SetValue("paths" + i, cmbPaths.Items[i]);

   if(someConditionHolds)
      break;
}

11voto

wefwfwefwe Points 1994

Vous sortez de la boucle avant la fin de la première itération.

3voto

Daniel Elliott Points 13253

Le problème est que, parce que vous break; dans la boucle sans aucune chance qu'il fasse autre chose, l'incrémentation de i ( i++ ) ne sera jamais atteint.

0voto

NET3 Points 535

Bien que votre problème soit résolu, je dois vous dire ceci, vous pouvez simplement utiliser la méthode CreateSubKey() pour vos besoins. Je pense que c'est un meilleur choix. :)

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

0voto

Tom Stickel Points 4201

Vous pouvez également vous retrouver avec du code inaccessible si vous utilisez par exemple Entity Framework et que vous n'avez pas ajouté cette référence à ce projet.

Disons que vous avez plusieurs projets comme un projet de couche de données, une classe de domaine, puis vous créez une application console pour les tests ou autre et vous faites référence à l'endroit où se trouve votre dbcontext, mais si vous n'utilisez pas disons nuget et n'ajoutez pas EF, vous obtiendrez un code inaccessible lorsque vous essayez d'écrire une boucle etc....

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X