首页 > 解决方案 > 如何解决未处理的异常:ArumentOutOfRangeException

问题描述

我试图捕获一个未处理的异常,但它仍然发生错误。我需要从哪里开始“尝试”,何时/如何抓住它?这是我的代码:

            String allMarks = "";
            String toString1 = "";
            String toString2 = "";

            if (eventcounter.Count > 2)
            {
                allMarks = allMarks + eventcounter[0];

                for (int i = 0; i < eventcounter.Count; i++)
                {
                    toString1 = eventcounter[i].ToString();

                    for (int j = 1; j <= eventcounter.Count; j++)
                    {
                        try
                        {
                            toString2 = eventcounter[j].ToString();
                        }
                        catch (System.IndexOutOfRangeException)
                        {
                            Console.WriteLine("not enough elements to compare");
                            throw new System.ArgumentOutOfRangeException("Index parameter is out of range");
                        }

                        if (toString1 != toString2)//(eventcounter[i] != eventcounter[j])
                        {
                            allMarks = allMarks + eventcounter[j];
                            Console.WriteLine(allMarks);
                            //_sensorTextView3.Text = string.Format("Eventcounter: {0}", allMarks);
                        }
                    }
                }
               // _sensorTextView3.Text += allMarks;
            }

更新:好的,我现在只使用一个循环而不是两个,但是每当运行代码时仍然会发生错误

for (int i = 0; i < eventcounter.Count; i++)
                {
                    try
                    {
                        toString1 = eventcounter[i].ToString();
                        toString2 = eventcounter[i + 1].ToString();
                    }
                    catch (System.IndexOutOfRangeException)
                    {

                        throw new System.ArgumentOutOfRangeException("Index parameter is out of range");
                    }

                    if (toString1 != toString2)
                    {
                        allMarks = allMarks + eventcounter[i+1];
                        Console.WriteLine(allMarks);
                    }

标签: c#indexoutofrangeexception

解决方案


eventcounter包含eventcounter.Count元素,编号从0eventcounter.Count-1

for (int j = 1; j <= eventcounter.Count; j++)

在某些时候j将变得等于eventcounter.Count。由于元素编号范围是 [ 0, eventcounter.Count],因此访问元素编号的尝试会eventcounter.Count抛出IndexOutOfRangeException


推荐阅读