#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. Обновил ответ. Вам просто нужно присвоить переменной начальное значение.