繁体   English   中英

Windows窗体中的C#:尝试自动添加新空间时出现“索引超出数组范围”

[英]C# in Windows Forms : “Index was outside the bounds of the array” at a try to auto-add new space

我真的不明白此错误的出处和解决方法。
我的想法是每次读取新对象时将空间增加1,这就是为什么我使用int m = a.GetLength(0)+1;
a[m, j] = Convert.ToString(m); 是j = 1,这意味着实际上是m的帐户数,即数组的最后位置。
每次要添加新元素时,如何在不写很多行并将向量复制到另一条+1行的情况下实现此目的?

// “指数数组的边界之外。”
//“ code.exe中发生了类型为'System.IndexOutOfRangeException'的未处理的异常”

带有代码和错误的照片:

带代码和错误的照片

    private void adauga_Click(object sender, EventArgs e)
    {

        int m = a.GetLength(0)+1;
            for (int j = 0; j < 7; j++)
            {   a[m, j] = Convert.ToString(m);
                a[m, j] = textnume.Text;
                a[m, j] = textprenume.Text;
                a[m, j] = textcnp.Text;
                a[m, j] = textserie.Text;
                a[m, j] = textnumar.Text;
                a[m, j] = textdebcre.Text;
                b[m] = Convert.ToInt32(textsuma.Text); } }

其中a和b是:静态字符串[,] a =新字符串[1,1]; static int [] b = new int 1 ;

当您尝试访问不存在的数组中的条目时,会发生您的问题。 不允许这样做,因此会引发异常。

此时的数组具有您在第一行中定义的大小:

static string [,] a= new string [1,1];

这意味着唯一有效的条目位于a[0,0] 要访问其他条目,您需要将数组显式调整为所需的新大小: 如何在C#中调整多维(2D)数组的大小?

我猜您想在用户单击该按钮后将来自应用程序的条目保存在此数组中。 我建议您使用对象和List<T>解决此问题,而不要使用多维数组:

创建一个包含要保存的属性的对象,类似于以下内容:

class MyClass
{
    public string Nume {get; set;}
    public string PreNume {get; set;}
    //your other properties here
}

然后创建一个列表将对象保存到其中。 列表对数组具有优势,即使您定义了数组,数组也可以增长。 列表中的T用于任意类,您可以在此处使用上面定义的MyClass 所以:

List<MyClass> myList = new List<MyClass>();

现在放在一起:

private List<MyClass> _myList = new List<MyClass>();
private void adauga_Click(object sender, EventArgs e)
{
    //create a myClass Object
    var myClass = new MyClass();
    myClass.Nume = textnume.Text;
    myClass.PreNume = textprenume.Text;
    //continue here...

    //add it to the list
    _myList.add(myClass);
}

首先,只有textdebcre.Text将以a [m,j]结尾。 其次,a为[1,1],并且您尝试访问a [1,然后大于1],因此出现错误。 只需对new string[1,7]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM