2015-02-25 4 views
-6

В моих расчетных строках я получаю ошибку «использование неназначенной локальной переменной ...» для lodgingFee, registrationFee и дней. Ive объявил переменные в начале, поэтому я не знаю, что им делать.Что делать с моей ошибкой?

private void button1_Click(object sender, EventArgs e) 
    { 
     decimal days; 
     decimal registrationFee; 
     decimal lodgingFee; 
     decimal total; 
     decimal lodgingCal; 

     string registration; 

     if (workshopListBox.SelectedIndex != -1) 
     { 
      registration = workshopListBox.SelectedItem.ToString(); 

      switch (registration) 
      { 
       case "Handling Stress": 
        registrationTextBox.Text = "$1000"; 
        days = 3; 
        registrationFee = 1000; 
        break; 
       case "Time Managment": 
        registrationTextBox.Text = "$800"; 
        days = 3; 
        registrationFee = 800; 
        break; 
       case "Supervision Skills": 
        registrationTextBox.Text = "$1500"; 
        days = 3; 
        registrationFee = 1500; 
        break; 
       case "Negotiation": 
        registrationTextBox.Text = "$1300"; 
        days = 5; 
        registrationFee = 1300; 
        break; 
       case "How to Interview": 
        registrationTextBox.Text = "$500"; 
        days = 1; 
        registrationFee = 500; 
        break; 
      } 
     } 

     string lodging; 

     if (locationListBox.SelectedIndex != -1) 
     { 
      lodging = locationListBox.SelectedItem.ToString(); 

      switch (lodging) 
      { 
       case "Austin": 
        lodgingTextBox.Text = "$150"; 
        lodgingFee = 150; 
        break; 
       case "Chicago": 
        lodgingTextBox.Text = "$225"; 
        lodgingFee = 225; 
        break; 
       case "Dallas": 
        lodgingTextBox.Text = "$175"; 
        lodgingFee = 175; 
        break; 
       case "Orlando": 
        lodgingTextBox.Text = "$300"; 
        lodgingFee = 300; 
        break; 
       case "Phoenix": 
        lodgingTextBox.Text = "$175"; 
        lodgingFee = 175; 
        break; 
       case "Raleigh": 
        lodgingTextBox.Text = "$150"; 
        lodgingFee = 150; 
        break; 
      } 
     } 

     lodgingCal = lodgingFee * days; 
     total = registrationFee + lodgingCal; 


     totalTextBox.Text = total.ToString("c"); 

    } 

    } 
} 
+0

Вы их объявили, но код не гарантирует, что вы их назначили. Об этом сообщает компиляция. И да, вам нужно назначить значения для переменных, прежде чем вы сможете их использовать. –

+0

Перечитайте сообщение об ошибке. Это не о декларации ... –

+0

Возможный дубликат [ошибка: использование неназначенной локальной переменной] (http://stackoverflow.com/questions/11484645/error-use-of-unassigned-local-variable) –

ответ

1

Перед использованием вы должны инициализировать переменную.

decimal days = 0.0; 
decimal registrationFee = 0.0; 
decimal lodgingFee =0.0; 
decimal total = 0.0; 
decimal lodgingCal= 0.0; 
+0

Итак, когда я использую decimal, double и т. д. Всегда ли нужно указывать их значение? – Niomi

+0

Нет, это только в том случае, если в логике есть какой-то путь, в котором вы их не назначили, а затем используйте их. Как и здесь. Предположим, что вы делаете исключение в случае по умолчанию для оператора switch, тогда по умолчанию назначение по умолчанию не требуется. –

1

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

switch (registration) 
     { 
      case "Handling Stress": 
       registrationTextBox.Text = "$1000"; 
       days = 3; 
       registrationFee = 1000; 
       break; 
      case "Time Managment": 
       registrationTextBox.Text = "$800"; 
       days = 3; 
       registrationFee = 800; 
       break; 
      case "Supervision Skills": 
       registrationTextBox.Text = "$1500"; 
       days = 3; 
       registrationFee = 1500; 
       break; 
      case "Negotiation": 
       registrationTextBox.Text = "$1300"; 
       days = 5; 
       registrationFee = 1300; 
       break; 
      case "How to Interview": 
       registrationTextBox.Text = "$500"; 
       days = 1; 
       registrationFee = 500; 
       break; 
      default: 
       throw new ApplicationException("oh no I don't want this"); 
     } 

Вы получаете ошибки, потому что есть возможные пути выполнения в коде, где даже если переменные не были назначены еще, вы уже их использованием. И это может быть только в том случае, если вы не обрабатываете регистрацию, поэтому в любом случае лучше добавить по умолчанию все ваши инструкции switch. Это защитное программирование.

+0

Это имеет смысл. Для операторов switch я могу использовать «else» вместо стандартного или по умолчанию лучше? – Niomi

+0

Вы не можете использовать другое, потому что оно не будет компилироваться. else может использоваться только вместе с if. –

1

Вы должны вручную инициализировать локальную переменную, поскольку она по умолчанию не инициализируется.

Перед использованием следует инициализировать переменную lodgingFee. Вы должны выглядеть так, как показано ниже.

private void button1_Click(object sender, EventArgs e) 
    { 
     decimal days = 0.0; 
     decimal registrationFee = 0.0; 
     decimal lodgingFee = 0.0; 
     decimal total = 0.0; 
     decimal lodgingCal = 0.0; 
     string registration = ""; 
     ............... 
     ................... 
    } 
0

Назначьте значения по умолчанию для каждой переменной.

private void button1_Click(object sender, EventArgs e) 
    { 
     decimal days = 0.0; 
     decimal registrationFee = 0.0; 
     decimal lodgingFee = 0.0; 
     decimal total = 0.0; 
     decimal lodgingCal = 0.0; 

     string registration = String.Empty; 
     //.............. 
    } 
Смежные вопросы