c#索引超出数组的范围

时间:2014-07-29 03:54:58

标签: c# arrays listbox

此代码给出了一个错误,指出索引超出了数组的范围,但如果我使用MessageBox.Show()而不是ListBox.Items.Add(),则错误不会发生。

string[] arr = new string[gradeListbox.Items.Count];

for (int i = 0; i < gradeListbox.Items.Count; i++)
{
    arr[i] = gradeListbox.Items[i].ToString();
    Regex reg = new Regex(@"[0-9\.]+");
    grade = double.Parse(reg.Match(arr[i].ToString()).Value);
    studentName = Regex.Replace(arr[i], @"[\d-]", string.Empty);
    gradelistbox.Items.Add(grade + studentName);

    // ...
}

发生了什么事?如何修复它以便它与ListBox一起使用?

2 个答案:

答案 0 :(得分:2)

您的代码不断添加到gradelistbox.items,从而增加了其数量。另一方面,arr的大小保持不变。因此,只要循环到达gradelistbox.items的原始边界,就会得到索引超出范围的异常。

您可以通过将数组arr替换为可以动态调整大小的容器(例如List<string>)来解决此问题。这样,您每次向arr添加项目时都可以将项目添加到gradelistbox.items,并保持其长度不变。

答案 1 :(得分:0)

尝试使用 AddRange 方法在列表中添加值

有关详细信息,请阅读以下链接

Why is AddRange faster than using a foreach loop?

由于 -Nimesh