声明了数组大小,但仍然出现错误:索引超出范围

时间:2016-02-02 15:22:27

标签: c# arrays

我有两个列表(相同长度),存储了大约10个整数。 我通过for循环运行它们,同时根据if语句检查它们。我知道这个列表包含1个值,该值对if - 语句的回答是真的。 实际上,我的第一个Debug显示了正确的值(对应于列表中值的位置,即8)。

我的第二个调试显示了这个地方的相应值,即71。 但是,当我尝试将列表的值(即71)赋给数组DefMarkerX[count]的第一个点时,我收到以下错误。

  

IndexOutOfRangeException:数组索引超出范围。

我真的不知道问题是什么,因为我已经在早期声明了数组的大小。

我的代码是:

public static int Markers = 1;
public static int[] DefMarkerX = new int[Markers];
public static int[] DefMarkerY = new int[Markers];

// ....................................................

int count = 0;
for (int i = 0; i < MarkerPosX.Count; i++)
{
   if (MarkerPosX[i] > 10 && MarkerPosX[i] < 246 && MarkerPosY[i] > 10 && MarkerPosY[i] < 246)
   {
        Debug.Log("i: " + i)
        Debug.Log("markerposx: " + MarkerPosX[i]);
        DefMarkerX[count] = MarkerPosX[i];

显示的最后一行是我收到错误的地方。 在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

不确定您的意图,但如果您事先无法知道DefMarkerX的大小,则可以使用List<int>

public static List<int> DefMarkerX = new List<int>;

for (int i = 0; i < MarkerPosX.Count; i++)
{
   if (MarkerPosX[i] > 10 && MarkerPosX[i] < 246 && MarkerPosY[i] > 10 && MarkerPosY[i] < 246)
   {
       DefMarkerX.Add(MarkerPosX[i]);
   }
}

如果您想保留MarkerPosX的索引,可以使用List<KeyValuePair<int, int>>

public static List<KeyValuePair<int, int>> DefMarkerX = new List<KeyValuePair<int, int>>;

for (int i = 0; i < MarkerPosX.Count; i++)
{
   if (MarkerPosX[i] > 10 && MarkerPosX[i] < 246 && MarkerPosY[i] > 10 && MarkerPosY[i] < 246)
   {
       DefMarkerX.Add(new KeyValuePair(i, MarkerPosX[i]));
   }
}