无法向List添加值 - C#

时间:2014-12-30 11:51:49

标签: c# visual-studio list indexing

很多时候我不得不创建结构列表来存储我在C#中的数据。但这一次,我有一个错误,"索引超出范围"。我不太明白为什么,因为我已经做过类似的项目,但如果有人能帮助我,我将非常感激。

class mng
{
    int day = 0;
    List<Despesas> dias = new List<Despesas>();

    public struct Despesas
    {
        public double transportes;
        public double alimentacao;
        public double vestuario;
        public double agua;
        public double luz;
        public double educacao;
    }        

    public mng ()
    {
    }

(这是我收到错误的地方)

    public void showMessage()
    {
        for (int i = 0; i < 31; i++)
        {
            MessageBox.Show("Água: " + dias[i].agua + "\nTransportes: " + dias[i].transportes);
        }
    }

并在Form1上:

    double transportes = Convert.ToDouble(txtTransportes.Text);
    double agua = Convert.ToDouble(txtAgua.Text);
    mng mngV = new mng(transportes, agua, educacao);

    if (day < 31)
        {
            button1.Enabled = false;
            //this is the button that enables the ShowMessage() Method.
        }
        else
        {
            button1.Enabled = true;
        }

在List有31个值之前,我从不执行方法showMessage(),为什么它不在Index之外呢?我首先尝试在网站上搜索,但是虽然有很多相同的错误但是找不到任何类似问题的问题。 我将重载构造函数更改为:

    public mng(double transportes, double agua)
    {            
        Despesas dia = new Despesas();
        dia.transportes = transportes;
        dia.agua = agua;
        dias.Add(dia);
        MessageBox.Show("Added: " + dias.Count);
        day++;
    }

猜猜看,dias.Count总是1.我不明白为什么......

4 个答案:

答案 0 :(得分:0)

尝试将您的方法更改为:

public void showMessage()
{
  for (int i = 0; i < dias.Count; i++)
  {
      MessageBox.Show("Água: " + dias[i].agua + "\nTransportes: " + dias[i].transportes);
  }
}

答案 1 :(得分:0)

尝试这个怎么样:

public void showMessage()
{
  for (int i = 0; i < dias.Count; i++)
  {
    MessageBox.Show("Água: " + dias[i].agua + "\nTransportes: " + dias[i].transportes);
  }
}

甚至更好:

public void showMessage()
{
    foreach(var d in dias)
    {
        MessageBox.Show(... + d.agua + .... + d.transportes);
    }
}

答案 2 :(得分:0)

只需改变您的代码:

for (int i = 0; i < dias.Count; i++)

您可以在调试器下检查它,以验证循环运行时阵列中有多少项。

答案 3 :(得分:0)

确保dias有31个值。你可以使用foreach代替for,因为它会给出相同的结果,性能更好

    foreach(var item in dias )
   {
    MessageBox.Show("Água: " + item.agua + "\nTransportes: " + item.transportes);
   }

如果您使用的是问题,那么因为您的列表可能没有正确填充,所以项目数量较少