c#list index 0,显示值为-1

时间:2017-03-08 14:48:15

标签: c# arrays list unity3d unity2d

我正在创建一个统一的基本程序,我检查列表数组索引根据值执行某个操作,然后我增加索引。我遇到的问题是数组总是存储在索引0并始终等于-1。

    public class numGen(){  
    int val;
    int i = 0;

    System.Random rnd = new System.Random();
        val = rnd.Next(1, 5);
        arrayList.Add(val);

        Debug.Log("val"+val);
        Debug.Log("array"+arrayList.IndexOf(i));

        if (arrayList.IndexOf(i) == 1)
         {
                Debug.Log("action1");
                i++;
         }
        else if (arrayList.IndexOf(i) == 2)
                {
                  Debug.Log("action2");
                  i++;
                }
           //and so on
    }

我在日志中使用了debug,因此val将输出一个预期值,例如2,当我检查索引中存储的值为-1时,会添加到数组中。

不确定int值的变化方式或原因。

3 个答案:

答案 0 :(得分:4)

这里的问题是误解了ArrayListIndexOf()的工作原理。

ArrayList.IndexOf()

  

搜索指定的对象返回ArrayList中元素范围内第一次出现的从零开始的索引,该元素从指定索引开始并包含指定数量的元素。

所以你的例外来自:

  

ArrayList中元素范围内第一次出现的值的从零开始的索引,该值从startIndex开始并包含元素的计数数(如果找到);否则,-1。

我认为你正在寻找这样的事情:

ArrayList.Item()

  

获取或设置指定索引处的元素。

也可以

  

此属性提供了使用以下语法访问集合中特定元素的功能:myCollection [index]

您案例中的一个例子:

if (arrayList[i] == 1)
{
   // if true..
}

答案 1 :(得分:2)

arrayList.IndexOf(i)给出i的任何元素的索引。如果您想要索引 i的值,则必须改为使用arrayList[I]

答案 2 :(得分:1)

IndexOf给出您给出的值的索引。如果在数组中找不到相等的值,则返回-1

ArrayList arr = new ArrayList();
arr.Add(5);
arr.Add(2);
var isMinusOne = arr.IndexOf(0); //Is -1
var isZero = arr.IndexOf(5); //Is 0