2009-09-25 16 views
10

Recibo un mensaje de "Código inalcanzable detectado" en Visual Studio en el punto i ++ en mi código a continuación. ¿Puedes ver lo que he hecho mal?C# Código inalcanzable detectado

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

Respuesta

24

El problema es que esto en realidad no es un bucle. Usted no tiene ninguna condición en la ruptura por lo que es equivalente podría escribir algo así como

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

alternativa tiene que corregir con algo como

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

    if(someConditionHolds) 
     break; 
} 
+0

Muchas gracias Juri. – Jamie

11

Estás saliendo del ciclo antes del final de la primera iteración.

+0

Gracias, ¿podrías mostrarme cómo debo volver a escribirlo? – Jamie

+0

acaba de mostrarlo. – Juri

+0

simplemente borre la línea que dice 'break;' – wefwfwefwe

3

El problema es que debido a que break; en el bucle con no hay posibilidad de que haga otra cosa, nunca se alcanzará el incremento de i (i++).

0

Aunque su problema está resuelto, necesito decirle esto, puede simplemente usar el método CreateSubKey() para su propósito. Creo que es una mejor opción. :)

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

También puede terminar encima de conseguir código inalcanzable si se utiliza decir, por ejemplo Entity Framework, y que no añadir que la referencia a ese proyecto.

Digamos que tiene varios proyectos como un proyecto de capa de datos, una clase de dominio, luego crea una aplicación de consola para realizar pruebas o lo que sea y hace referencia a dónde está dbcontext, pero si no utiliza decir nuget y agrega EF, obtendrás código inalcanzable cuando trates de escribir un ciclo, etc. ...

Cuestiones relacionadas