将项添加到字典将返回系统.IndexOutOfRangeException:索引超出了数组的界限

本文关键字:数组 界限 索引 IndexOutOfRangeException 添加 字典 系统 返回 | 更新日期: 2023-09-27 17:59:45

我有以下代码:

List<string> group = new List<string>();
List<int> groupInNumber = new List<int>();
Dictionary<string, List<string>> dicMyMap = new Dictionary<string, List<string>>();
Dictionary<string, int[]> a = new Dictionary<string, int[]>();
Dictionary<string, string[]> b = new Dictionary<string, string[]>();
private void SetData(out ExpandableListViewAdapter mAdapter)
    {
        int[] currentStatus = a["currentStatus"];
        string[] statusDesc = b["description"];
        int[] ticketID = a["ticketID"];
        foreach (int s in currentStatus)
        {
            if (s == 1)
            {
                group.Add(statusDesc[0]);
            }
            else if (s == 2)
            {
                group.Add(statusDesc[1]);
            }
            else if (s == 3)
            {
                group.Add(statusDesc[2]);
            }
            else if (s == 4)
            {
                group.Add(statusDesc[3]);
            }
            else if (s == 5)
            {
                group.Add(statusDesc[4]);
            }
            else if (s == 6)
            {
                group.Add(statusDesc[5]);
            }
            else if (s == 7)
            {
                group.Add(statusDesc[6]);
            }
            else if (s == 8)
            {
                group.Add(statusDesc[7]);
            }
            else if (s == 9)
            {
                group.Add(statusDesc[8]);
            }
            else if (s == 10)
            {
                group.Add(statusDesc[9]);
            }
        }
        for (int p = 0; p <= ticketID.Count(); p++)
        {
            groupInNumber.Add(ticketID[p]);
        }
        List<string> ticket = new List<string>();
        for (int z = 0; z <= ticketID.Count(); z++)
        {
            string tix = ticketID[z].ToString();
            ticket.Add(tix);
            dicMyMap.Add(groupInNumber[z].ToString(), ticket);
            ticket.Remove(tix);
        }
        mAdapter = new ExpandableListViewAdapter(this, group, dicMyMap);
    }

这里出现错误,groupInNumber.Add(ticketID[p]);我不明白的是,当0应该引用数组中的第一个值时,为什么索引在边界之外。我尝试计数int[] ticketID = a["ticketID"];中的项目,不是null,返回39(数组中的项目数)。

将项添加到字典将返回系统.IndexOutOfRangeException:索引超出了数组的界限

这是您的问题:

for (int p = 0; p <= ticketID.Count(); p++)
{
    groupInNumber.Add(ticketID[p]);
}

应该是:

for (int p = 0; p < ticketID.Count(); p++)

您的迭代超出了1个索引。0...910项。。所以创建一个到0..count-1的for循环,所以它应该是p < ticketID.Count()

这也适用于其他for环路


离题:

由于ticketIDArray,您也可以使用Length属性。

for (int p = 0; p < ticketID.Length; p++)

您的groupInNumberList<int>。List类还有一个AddRange()方法:

所以这个for循环。。。

for (int p = 0; p <= ticketID.Count(); p++)
{
    groupInNumber.Add(ticketID[p]);
}

可以替换为:

groupInNumber.AddRange(ticketID);