Проблема новичка: присвоение значения переменной из нового объекта класса. C#

#c#

#c#

Вопрос:

 DinnerFun dinnerFun = new DinnerFun { PeepQty = (int)nudPeepQty.Value };
  

Я создаю новый объект класса DinnerFun и пытаюсь присвоить значение из числового объекта up down из формы переменной int PeepQty .

Когда я перехожу в режим отладки, я вижу, что nudPeepQty имеет числовое значение, но оно никогда не присваивается PeepQty , и мое конечное вычисление всегда заканчивается как 0.

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

DinnerParty.cs

     using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MonuEventPlanning
{
    class DinnerFun
    {
        const int FoodCost = 25;
        public int PeepQty;
        decimal CostOfBeverage;
        decimal CostOfDecorations;
        decimal TotalCost; 

        public void CalcDrinks(bool HealthOption)
        {
            if (HealthOption)
            {
                CostOfBeverage = 5M;
            }
            else
            {
                CostOfBeverage = 20M;
            }
        }

        public void CalcDecorations(bool FancyOption)
        {
            if (FancyOption)
            {
                CostOfDecorations = (PeepQty * 15M)   50M; 
            }
            else
            {
                CostOfDecorations = (PeepQty * 7.5M)   30M; 
            }
        }

        public decimal CalcTotalCost(bool HealthyOption)
        {
            if (HealthyOption)
            {
                TotalCost = (CostOfDecorations   CostOfBeverage) * .95M;
                return TotalCost; 
            }
            else
            {
                TotalCost = (CostOfBeverage   CostOfDecorations)   (PeepQty*25M);
                return TotalCost; 
            }
        }
    }
}
  

————Form1.cs ————-

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace MonuEventPlanning
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
        }

        private void btnCalc_Click(object sender, EventArgs e)
        {
            DinnerFun dinnerFun = new DinnerFun { PeepQty = (int)nudPeepQty.Value };
            dinnerFun.CalcDrinks(cbxHealthy.Checked);
            dinnerFun.CalcDrinks(cbxFancy.Checked);
            DisplayCost(); 
        }

        public void DisplayCost()
        {
            DinnerFun dinnerFun = new DinnerFun(); 
            tbxDisplayCost.Text = dinnerFun.CalcTotalCost(cbxHealthy.Checked).ToString("c"); 
        }
    }
}
  

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

1. Как я уже говорил в предыдущем комментарии, вы можете просто отредактировать свой собственный вопрос.

2. Должны ли эти два блока кода как-то отличаться? Если это так, я этого не вижу.

3. Я думаю, что вы вставили туда один и тот же файл дважды. Действительно нужно увидеть реализацию класса DinnerFun, чтобы помочь вам.

4. : P отметил, я так и сделаю. = P

5. Переименуйте вторую переменную в «anotherdinnernotthesameast First». Исправьте это, предоставив методу DisplayCost аргумент.

Ответ №1:

Проблема в том, что вы создаете другой DinnerFun, который отличается от первого. Естественно, объект DinnerFun в DisplayCost будет иметь нуль для значения свойства. Возможно, вы имели в виду это…

     private void btnCalc_Click(object sender, EventArgs e)
    {
        DinnerFun dinnerFun = new DinnerFun { PeepQty = (int)nudPeepQty.Value };
        dinnerFun.CalcDrinks(cbxHealthy.Checked);
        dinnerFun.CalcDrinks(cbxFancy.Checked);
        DisplayCost(dinnerFun); 
    }

    public void DisplayCost(DinnerFun dinnerFun)
    {
        tbxDisplayCost.Text = dinnerFun.CalcTotalCost(cbxHealthy.Checked).ToString("c"); 
    }
  

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

1. Вы правы. Это было частью проблемы. Но когда я удаляю этот новый объект DinnerFun… в нем говорится, что dinnerFun не существует в текущем контексте. Даже если я изменю метод нажатия кнопки на общедоступную пустоту…

2. неважно… я понял, где я должен объявить dinnerFun. Спасибо за вашу помощь. Я ДЕЙСТВИТЕЛЬНО ценю… это дает этому зеленому молодому кузнечику программиста надежду узнать, что такие люди, как вы, делают добро. = D

3. Не беспокойтесь… что-нибудь, чтобы помочь. SO — хорошее место для получения хороших ответов, и здесь есть даже лучшие программисты, чем я.