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
?
似乎你试图获得一个列表的元素,其中包含少于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);
}
}
}