我正在尝试将textbox和numericUpandDown值添加到数组中,但它似乎不起作用。
Carro []carros = new Carro[1];
private Carro carro;
public Form1()
{
..
}
private void Form1_Load(object sender, EventArgs e)
{
..
}
private void AdicionarCarro()
{
this.carro = new Carro(textboxCor.Text, textboxMarca.Text, textboxModelo.Text,
(int.Parse(numUpDownCilindrada.Text)), (int.Parse(numUpDownVelocidade.Text)));
}
private Carro[] AdicionarArray(Carro carro, Carro[] array)
{
AdicionarCarro();
int novoTamanho = array.Length + 1;
Carro[] carros = new Carro[novoTamanho];
for (int i = 0; i < array.Length; i++)
{
carros[i] = array[i];
}
carros[novoTamanho] = carro;
return carros;
}
private void buttonGravar_Click(object sender, EventArgs e)
{
AdicionarArray(carro, carros);
}
当我输入值并单击“buttonGravar”时,它会给我这个 错误:
我很高兴得到一些提示/帮助。
答案 0 :(得分:6)
使用System.Collection.Generic.List<T>
会更简单,因为它没有固定的大小:
List<Carro> carros = new List<Carro>();
carros.AddRange(array);
carros.Add(carro);
return carros;
答案 1 :(得分:3)
更好的方式:
private List<Carro> Carros;
public Form1()
{
Carros = new List<Carro>();
..
}
private void Form1_Load(object sender, EventArgs e)
{
..
}
private void AdicionarCarro()
{
var carro = new Carro(textboxCor.Text, textboxMarca.Text, textboxModelo.Text,
(int.Parse(numUpDownCilindrada.Text)), (int.Parse(numUpDownVelocidade.Text)));
Carros.Add(carro);
}
private void buttonGravar_Click(object sender, EventArgs e)
{
AdicionarCarro();
}
帮助您理解代码:
carros[novoTamanho] = carro;
应该是
carros[novoTamanho - 2] = carro;
原因:
数组索引从0开始。novoTamanh
表示新的长度(从1开始,而不是与索引不同),这是在数组外部。
答案 2 :(得分:0)
它是一个超出范围异常的索引,因为您的数组Carro的大小为tmanho:
Carro[] carros = new Carro[novoTamanho];
和carros可以准确包含&#34; novoTamanho&#34;从&#34; 0&#34;索引的项目到&#34; novoTamanho -1&#34;
您可以通过定义:
来解决此问题int novoTamanho = array.Length + 2;
或者,如果您不想管理索引,请使用列表:
List<Carro> listCarro = new List<Carro>;
listCarro.AddRAnge(array);
listCarro.Add(carro);
return listCarro.ToArray();