无法将值添加到列表 - 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。我不明白为什么...
尝试将方法更改为:
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 问题,是因为您的列表可能未正确填写,项目较少