【问题标题】:Adding textbox values to an array not working C#将文本框值添加到数组不起作用 C#
【发布时间】:2017-10-13 12:44:27
【问题描述】:

我正在尝试将文本框和 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”时,它给了我这个 错误:

我很高兴能得到一些提示/帮助。

【问题讨论】:

  • 该数组被定义为只包含一个值,Carro []carros = new Carro[1]; 这就是您收到该错误的原因
  • 您忘记使用 AdicionarArray() 的返回值。这只是一个根本错误的方法,而不仅仅是因为您忘记更新 carros 变量,而是将其声明更改为 List&lt;Carro&gt;

标签: c# arrays winforms


【解决方案1】:

使用System.Collection.Generic.List&lt;T&gt; 会简单得多,因为它没有固定大小:

List<Carro> carros = new List<Carro>();
carros.AddRange(array);
carros.Add(carro);
return carros;

【讨论】:

  • 我还是个学生,我们还没有参与到这方面(如果我没记错的话),不过感谢您提供的替代解决方案!
  • 我用过这个,但它似乎不起作用,它说“不能隐式转换类型 'System.Collections.Generic.List' 到 'CriarCarroForm.Carro[] '"
【解决方案2】:

更好的方法:

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开始,不像索引是0),它在数组之外。

【讨论】:

  • 所有这些杂技索引都在乞求某人指出该代码到底有多可怕,以及它如何需要彻底检修,而不是更多的创可贴。
  • 哦,是的!谢谢,我太笨了,没有意识到这一点!
  • @DonBoitnott 嘿,谢谢指出:D,我真的是初学者,甚至更低。
  • @DonBoitnott 你所说的杂技索引是什么意思?
  • 抱歉这么直率,但我倾向于建议更好的解决方案,而不仅仅是如何避免自己给自己带来的问题......初学者或否。至于你的问题......我的意思是,如果你发现需要像建议的那样做花哨的索引,这通常意味着你在滥用数组,或者对它的整体使用处理不当。
【解决方案3】:

这是一个索引超出范围异常,因为您的数组 Carro 的大小为 tmanho:

Carro[] carros = new Carro[novoTamanho];

并且 carros 可以包含从“0”到“novoTamanho -1”索引的完全“novoTamanho”项目

您可以通过定义简单地解决这个问题:

int novoTamanho = array.Length + 2;

或者如果您不想管理索引,请使用列表:

List<Carro> listCarro = new List<Carro>;
listCarro.AddRAnge(array);
listCarro.Add(carro); 
return listCarro.ToArray();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多