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

本文关键字:范围 索引 循环 | 更新日期: 2023-09-27 18:17:50

我有一个像这样的循环

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 ?

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

似乎你试图获得一个列表的元素,其中包含少于20个元素,你将不得不显示一些更多的代码,你在循环中做什么。

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

"i"不能等于"i+1"并且will永远不会等于numberofelements,因为你的循环限制(i <numberofelements)>

你可以访问所有的元素:

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

为什么不这样做呢?

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

似乎你的循环是正确的20个元素

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

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

也不需要

if(i==numberofelements)
{
    break;
}

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

你可以这样做:

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

这样就不会出现空指针错误了

试试这个.....

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