C#循环[索引超出范围]

时间:2011-12-15 05:30:50

标签: c#

我有像这样的循环

int numberofelements=20;

for(int i=0;i<numberofelements;i++)
            {

                if(i==numberofelements)
                {
                    break;
                }

                if(i==i+1))
                {
                   //do some thing

                }else
                {
                  //do some thing else

                }

        }

很明显,这为列表的最后一个元素提供了运行时异常:Index was out of range. Must be non-negative and less than the size of the collection.

如何处理此列表的最后一个元素而不是检查条件i==i+1

5 个答案:

答案 0 :(得分:3)

看起来你试图得到一个包含少于20个元素的List的Elemrnt,你将不得不展示一些代码,你在循环中用你做什么。

此外,您只需要 else 部分,因为其他部分永远不会成为现实:

”不能等于“ i + 1 ”,因为你的循环限制,它将永远不会等于 numberofelements (i&lt; numberofelements)

您可以通过以下方式访问所有元素:

for (int i = 0; i < list.Count; i++) // Loop through List with for
{
   // do something with list[i]
}

答案 1 :(得分:1)

为什么不这样做:

for (int i = 0; i < numberofelements - 1; i++)
{
    // do something
}

// do something else with numberofelements - 1

答案 2 :(得分:0)

看来你的循环对于20个元素是正确的

for(int i=0;i<numberofelements;i++)

但是对于最后一个元素,您需要检查i == numberofelements - 1哪个是索引19。

也不需要

if(i==numberofelements)
{
    break;
}

因为我永远不会等于20的数量元素

答案 3 :(得分:0)

我认为问题的一部分是你的第一个if语句永远不会被使用。 for循环将在i等于numOfElements之前退出(除非你在for循环中修改i)。

所以你可以这样做:

if (i == (numOfElements - 1)) {
    // do something
    break;
}

这会使你不会得到空指针错误。

答案 4 :(得分:0)

试试这个......

  int numberofelements=20;

            for (int i = 0; i < numberofelements; i++)
            {

                if (i == numberofelements - 1)
                {
                    Console.WriteLine("last element" + i);
                    break;
                }
                else
                {

                    if (i == i + 1)
                    {
                        Console.WriteLine(i);

                    }
                    else
                    {
                        Console.WriteLine(i);
                    }
                }
}