很多时候我不得不创建结构列表来存储我在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.我不明白为什么......
答案 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);
}
如果您使用的是问题,那么因为您的列表可能没有正确填充,所以项目数量较少