ArrayList.IndexOf在c#中返回-1

时间:2014-10-29 04:06:43

标签: c# arraylist

请我很困惑。我有一个大小为184的Arraylist。我的名单中有25个

[1] = 25

[2] = 30等。

我正在尝试返回项目示例的索引。返回0,其中item为25,返回1,其中30.但是,我使用的是什么项目。我用的时候

int l = myArray.IndexOf(myItem) ;

返回-1。我的项目是30.然后我用30替换myitem

int l = myArray.IndexOf(30) ;
int l = myArray.IndexOf("30") ;

两者都返回-1。但是,当我尝试

int l = Convert.ToInt16( myArray[2]);

以上返回30.请问哪里出错了?这是我第一次遇到这个。我很迷惑。我试过了。

int l = myArray.IndexOf("30", 1) ;
int l = myArray.IndexOf(30 ,1) ;

然而没有任何帮助。

更新

谢谢大家的时间。

我必须按照以下用户的建议使用列表。再次谢谢你。如果你写下你的答案,我会接受它也许它可能对某些人有所帮助。我修改我的代码如下。它现在有效,但我不确定为什么ListArray失败。

   List<long> li = new List<long>();
      foreach (long item in arlClientID)
          li.Add(item);

      int h = li.IndexOf(searchDuplicate.clientid);

1 个答案:

答案 0 :(得分:2)

@Blorgbeard建议您使用List而不是ArrayList的原因是因为Arraylist是非泛型集合,因此当您向arraylist添加项时它接受object而不是int \ string等。更多信息{{ 3}}

我怀疑你得到-1的原因是输出大概是30并不是&#34; myArray&#34;但是如下所述的字符串: -

            ArrayList myArray = new ArrayList();
            myArray.Add(25);
            myArray.Add(50);
            myArray.Add("30");
            Console.WriteLine(myArray.IndexOf(30)); // Returns  -1
            Console.WriteLine(myArray.IndexOf("30")); // Returns  2

因此,使用通用List集合而不是ArrayList会更好,更安全。