无法将值添加到列表 - C#

本文关键字:列表 添加 | 更新日期: 2023-09-27 18:35:36

很多时候,我不得不创建结构列表来在 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);
        }
    }

在表格 1 上:

    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;
        }

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

    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++;
    }

你猜怎么着,迪亚斯。计数始终为 1。我不明白为什么...

无法将值添加到列表 - C#

尝试将方法更改为:

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

试试这个怎么样:

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);
    }
}

只需以这种方式更改代码:

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

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

确保

dias 有 31 个值。您可以使用 foreach 而不是 for,因为它会给出相同的结果和更好的性能

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

如果您使用的是 for- than 问题,是因为您的列表可能未正确填写,项目较少