我应该如何正确地比较我的数组索引值与数组长度

时间:2016-01-28 03:06:42

标签: c# arrays

假设我有一个具有5个值int[] gear = new int[] {5,4,3,2,1};的数组,并且我还有一个变量用于获取我想要的值int currentGear = 0;现在我想在一定条件下逐步执行数组使用此代码:

if(rpm > shiftRPM && currentGear < gear.Length)
  currentGear++;

Console.WriteLine( gear[cuurentGear] );

但是,使用该代码我可以超过数组长度,因为gear.Length是5,但数组的索引为零(即我可以拥有的最大数字是4)。

所以我的解决方案是在if语句中只添加1到currentGear,但这个for循环按预期工作:

for(int i=0; i<gear.Length;i++;)
  Console.Write(gear[i]);

输出:5 4 3 2 1没有错误。

另外,如果我Console.Write(gear.Length);输出5,那么很明显我的错误是我的if语句允许我的索引传递gear.Length从4&lt; 5和5超出范围。

是否有更好的方法来增加我的数组索引变量而不是这样做:

if(rpm > shiftRPM && (currentGear+1) < gear.Length)
  currentGear++;

或者这是处理这种情况的最佳方法吗?

2 个答案:

答案 0 :(得分:1)

您的解决方案基本上是最好的方法。索引的最大值实际上是Length-1,而不是Length,所以当你只检查currentGear是否小于Length时,你并没有真正防止它变得太大。

答案 1 :(得分:-1)

为什么不将currentGear初始化为:

var currentGear = -1;