C# 结构和结构的对象在类中属于哪里?

C# 结构和结构的对象在类中属于哪里?,c#,object,struct,C#,Object,Struct,我正在制作一台自动售货机,我需要对总销售额和机器中剩余的饮料量进行索引。现在我已经设置好了,当用户点击苏打水的图片时,它会执行逻辑。下面是完整的课程: namespace _8_11 { struct Drink { public string Name; public float Price; public int Amount; } public partial class Form1 : Form

我正在制作一台自动售货机,我需要对总销售额和机器中剩余的饮料量进行索引。现在我已经设置好了,当用户点击苏打水的图片时,它会执行逻辑。下面是完整的课程:

namespace _8_11
{

    struct Drink
    {
        public string Name;
        public float Price;
        public int Amount;
    }

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        object[,] Cola = new object[,]
        {
            {"Coke", 1.00f, 20 },
            {"Beer", 1.00f, 20 },
            {"Sprite",1.00f, 20 },
            {"Grape", 1.50f, 20 },
            {"Cream", 1.50f, 20 }
        };

        float total = 0.00f;

        private void pictureBox1_Click(object sender, EventArgs e)
        {
            Drink Coke = new Drink();

            Coke.Name = (string)Cola[0, 0];
            Coke.Price = (float)Cola[0, 1];
            Coke.Amount = (int)Cola[0, 2];

            if (Coke.Amount > 1 && Coke.Amount <= 20)
            {
                Coke.Amount -= 1;
                total += Coke.Price;
                cokeLeftLabel.Text = Coke.Amount.ToString();
                totalSalesLabel.Text = total.ToString("c");
            }
            else {
            MessageBox.Show("We are out of Coke!");
            }
        }
    }
}
当用户单击图片时,这些变量将被重置。我需要在clicked方法之外初始化这些变量,但当我尝试将它们移到此方法之外时,会出现编译错误。当前上下文中不存在Amount

我修好了。修订后的守则如下:

if (Coke.Amount > 0 && Coke.Amount <= 20)
        {
            Coke.Amount -= 1;
            Cola[0, 2] = Coke.Amount;
            total += Coke.Price;
            cokeLeftLabel.Text = Coke.Amount.ToString();
            totalSalesLabel.Text = total.ToString("c");
        }

您可以尝试以下方法:

List<Drink> drinks = new List<Drink>
{
  new Drink("Cola", 1.5f 20),
  //...
}

private void pictureBox1_Click(object sender, EventArgs e)
{
  Drink drink = drinks[0];//Get the correct drink
  drink.Amount--;
   //...      

我通常创建一个自定义图片框,如下面的代码所示

public class DrinkPictureBox : PictureBox
{
    Drink drink = new Drink();

    public DrinkPictureBox(string Name, float Price, int Amount)
    {
        drink.Name = Name;
        drink.Price = Price;
        drink.Amount = Amount;
    }
}

尝试将变量的声明拉入类中

public partial class Form1 : Form
    {
        internal Drink Coke = new Drink();
        public Form1()
        {
            InitializeComponent();
            Coke.Name = (string)Cola[0, 0];
            Coke.Price = (float)Cola[0, 1];
            Coke.Amount = (int)Cola[0, 2];
        }
    }

然后,在Form1中声明初始约束。这将使窗体和事件都具有可见性。我试过这样做,但没有任何问题

在类中创建一个public-Drink变量,这将使它对类外的所有方法都可用。如果您还将其设置为静态,这也将使其可用于其他类。你试过这样做吗?你眼前的问题是作用域,但请注意,在这种情况下没有理由使用结构,它导致的问题比解决的问题还要多。如果你把饮料从一个结构改为一个类,你将避免更多可变结构所产生的问题。如果你的老师告诉你使用二维数组来做这个,那他就是个疯子。你仍然应该按照他说的去做作业,但是如果他邀请你检查他的运输集装箱,请记住礼貌地拒绝。@EdPlunkett是的,这是我的书籍说明。我可以很容易地用2d数组来完成这项工作。@Vipers刺客我尝试过创建新类,并使用新方法将新对象放入其中,但总是出现相同的错误:Coke,Amount在当前上下文之外。这本书说我需要使用2d数组。
public partial class Form1 : Form
    {
        internal Drink Coke = new Drink();
        public Form1()
        {
            InitializeComponent();
            Coke.Name = (string)Cola[0, 0];
            Coke.Price = (float)Cola[0, 1];
            Coke.Amount = (int)Cola[0, 2];
        }
    }