You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ListBox.Items.CopyTo()方法指定起始索引报错问题咨询

问题分析:ListBox.Items.CopyTo 指定起始索引报错的原因

1. 报错的直接原因

你代码里的array长度和ListBox.Items的元素数量(5个)完全一致。当调用listBox1.Items.CopyTo(array, 1)时,这个方法的逻辑是:把ListBox中的全部5个元素,从目标数组的索引1位置开始依次存入。

这就要求目标数组的长度至少是 1 + 5 = 6,但你的array只有5个元素的空间(索引范围0-4),最后一个元素要放到索引5的位置,直接超出了数组的边界,所以抛出System.IndexOutOfRangeException。

2. 第二个参数的真实作用

很多人会误解这个参数是「源集合的起始复制索引」,但实际上它是目标数组中开始接收元素的起始位置。这个参数存在的意义是让你可以把集合元素复制到目标数组的任意一段区域,比如:

  • 你有一个长度为10的数组,想把ListBox的元素从数组的索引3位置开始存放,就可以用listBox1.Items.CopyTo(array, 3),只要3 + 元素总数 ≤ 数组长度就不会报错。

3. 如何实现「从ListBox指定索引开始复制元素」

如果你的需求是只复制ListBox中从索引1开始的元素,而不是全部元素从目标数组索引1开始放,那CopyTo方法做不到,你可以用以下两种方式:

  • 手动循环:
    int startIndex = 1;
    object[] array = new object[listBox1.Items.Count - startIndex];
    for (int i = startIndex; i < listBox1.Items.Count; i++)
    {
        array[i - startIndex] = listBox1.Items[i];
    }
    
  • 用LINQ简化:
    int startIndex = 1;
    object[] array = listBox1.Items.Cast<object>().Skip(startIndex).ToArray();
    

内容的提问来源于stack exchange,提问作者user21524950

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 09:37:10