Использование неназначенной локальной переменной, которая не существует в текущем контексте

#c#

Вопрос:

Я пытаюсь добавить цену концессии в список. Я не могу получить доступ к переменной после завершения цикла for, потому что она выходит за рамки. Я также пытался написать TotalCost над циклом foreach, но тогда он недоступен в рамках логики.

 public void PayForConcessions()  {  foreach (ConcessionItem ci in concessionItems)  {  decimal totalCost;  totalCost  = ci.Price;  }   this.RemoveMoney(totalCost);  }  

Комментарии:

1. @DmitryBychenko decimal totalCost = concessionItems.Sum(m=gt;m.Price);

Ответ №1:

Вы должны назначить TotalCost и переместить его перед циклом foreach

 decimal totalCost = 0m; foreach (ConcessionItem ci in concessionItems) {  totalCost  = ci.Price; }  

Ответ №2:

Я также пытался написать TotalCost над циклом foreach,

Я думаю, что вы, возможно, положили его не в то место.. Это должно быть хорошо:

 public void PayForConcessions()  {  decimal totalCost = 0;  foreach (ConcessionItem ci in concessionItems)  {  totalCost  = ci.Price;  }  this.RemoveMoney(totalCost);  }  

Основное правило области видимости переменных; внутри того же набора { } скобок или любых вложенных скобок внутри, ниже точки объявления..

Комментарии:

1. Это вызывает ошибку «Использование неназначенной локальной переменной TotalCost». Это то, что я пробовал, прежде чем опубликовать это, и не смог понять.

2. Я понимаю, о чем ты говорил. Проблема, с которой я столкнулся, заключалась в том, что я вообще не назначал переменную. Спасибо за помощь.

3. Да, если вы хотите прочитать об этом, фраза, которую вам нужно погуглить, — это «определенное назначение c#».

Ответ №3:

Вы можете попробовать использовать Linq и вообще избавиться от цикла:

 using System.Linq;  ...  public void PayForConcessions() =gt;   RemoveMoney(concessionItems.Sum(ci =gt; ci.Price));  

Ответ №4:

decimal total cost; необходимо объявить внутри тела метода, но над циклом:

 public void PayForConcessions() {  // HERE  decimal totalCost = 0;   foreach (...)  {  ...  } }  

Для «использования неназначенной локальной переменной» вам просто нужно назначить значение по умолчанию. Так decimal totalCost = 0;

Комментарии:

1. Вы правы, и это то, что я считал правильным. Однако, когда я печатаю это так, я получаю ошибку «Использование неназначенной локальной переменной» внутри логики foreach при назначении ci.Price TotalCost… Это та часть, которую я не мог понять, когда шел по твоему пути.

2. Обновил ответ. Вам просто нужно присвоить переменной начальное значение.