2012-09-21 8 views
5

Descripción completa aquí, soy un estudiante que hace la tarea. Tengo 2 listboxes con elementos que se pueden seleccionar. Lo que se dice en ellos no es necesario que se extraiga. Escribí el código y todo funciona, excepto que aparece un error que dice "uso de variable no asignada" en 3 variables al final del código. Son locFees, días y registro. ¿Alguien puede decirme qué estoy haciendo mal que está causando que las variables no tengan un valor?variable no asignada de Listbox

private void btnCalc_Click(object sender, EventArgs e) 
    { 
     double registration, lodging, total, days, locFees; 
     int workshopIndex, locationIndex; 
     if (lbWorkshop.SelectedIndex != -1) 
     { 
      workshopIndex = lbWorkshop.SelectedIndex; 
      switch (workshopIndex) 
      { 
       case 0: 
        days = 3; 
        registration = 1000; 
        break; 
       case 1: 
        days = 3; 
        registration = 800; 
        break; 
       case 2: 
        days = 3; 
        registration = 1500; 
        break; 
       case 3: 
        days = 5; 
        registration = 1300; 
        break; 
       case 4: 
        days = 1; 
        registration = 500; 
        break; 
      } 
     } 
     else 
     { 
      MessageBox.Show("You didn't select a workshop."); 
     } 
     if (lbLocation.SelectedIndex != -1) 
     { 
      locationIndex = lbLocation.SelectedIndex; 
      switch (locationIndex) 
      { 
       case 0: 
        locFees = 150; 
        break; 
       case 1: 
        locFees = 225; 
        break; 
       case 2: 
        locFees = 175; 
        break; 
       case 3: 
        locFees = 300; 
        break; 
       case 4: 
        locFees = 175; 
        break; 
       case 5: 
        locFees = 150; 
        break; 
      } 
     } 
     else 
     { 
      MessageBox.Show("You didn't select a city."); 
     } 
     lodging = locFees * days; 
     total = registration + lodging; 
    } 

Respuesta

5

Puede alguien decirme lo que estoy haciendo mal que está causando las variables que no tienen un valor?

Claro - que está haciendo caso omiso de la posibilidad de que workshopIndex no es 0, 1, 2, 3 o 4.

Si usted cree que no debería ocurrir nunca, sólo tiene que añadir:

default: 
    throw new InvalidOperationException("Invalid selected index " + workshopIndex); 

O si lo que desea es utilizar algunos valores por defecto, hacer algo como:

default: 
    days = 1; 
    registration = 100; 
    break; 

Esa es la primera forma en que puede terminar con days y registration sin asignar.

A continuación, está el hecho de que solo ingresa en el bloque de conmutadores si lbWorkshop.SelectedIndex != -1. Su bloque de else es simplemente:

else 
{ 
    MessageBox.Show("You didn't select a workshop."); 
} 

... así que después de que else bloque, que va a continuar. Es probable que desee:

else 
{ 
    MessageBox.Show("You didn't select a workshop."); 
    return; 
} 

entonces usted tiene el mismo problema para locFees, tanto en términos de la sentencia switch y el bloque else.

Una cosa para aprender de esto: agradecer que el compilador los haya detectado. Te impidió ejecutar código que definitivamente tenía errores. Eso siempre es bueno.

Cuestiones relacionadas