c# - 将项目添加到字典返回 System.IndexOutOfRangeException : Index was outside the bounds of the array

标签 c# arrays dictionary indexoutofboundsexception

<分区>

我有下面的代码:

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"]; 中的项目,不为空,返回 39(数组中的项目数)。

最佳答案

这是你的问题:

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

应该是:

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

您的迭代 1 个索引太过分了。 0...910 items.. 所以创建一个 for 循环到 0..count-1所以应该是p < ticketID.Count()

这也适用于其他 for循环


题外话:

ticketID是一个 Array你也可以使用 Length属性(property)。

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);

关于c# - 将项目添加到字典返回 System.IndexOutOfRangeException : Index was outside the bounds of the array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38715295/

相关文章:

c# - 在 C# 中访问 Imap

arrays - Haskell:有没有比 MArray 更通用的键/值存储类?

python字典,分配随机值,其总和为某个值

python - 使用 python 如何在文本文件的选择行中插入字符串,其中插入的字符串取决于行的内容和已知的映射?

swift - Swift 中的奇怪字典

c# - DetailsView.ItemInserted 事件查找主键(DataKey)

c# - 为什么 Windows 7 无法从我使用 DotNetZip 创建的受密码保护的 zip 文件中提取文件?

javascript - 鼠标中键单击链接仅打开新选项卡 ASP C#

java - 将二维数组中的所有元素向下移动

javascript - 如何在基于回调的循环中使用 yield?