2014-10-29 36 views
-1

请让我困惑。我有一个大小为184的Arraylist。在我的列表是25ArrayList.IndexOf在c中返回-1#

[1] = 25

[2] = 30等

我试图返回一个项目例子的索引。返回0,其中项目是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); 
+9

我建议你不要使用ArrayList。改为使用'List '。 – Blorgbeard 2014-10-29 04:09:40

+0

什么是myItem和int? – ChiefTwoPencils 2014-10-29 04:11:19

+1

你如何将项目添加到列表中? – Blorgbeard 2014-10-29 04:11:27

回答

2

原因@Blorgbeard建议你使用的不是ArrayList名单是因为ArrayList的非泛型集合,因此当你添加一个项目的ArrayList它接受对象,而不是INT \串等更多信息Here

我怀疑你正在为-1输出大概是30的原因是没有下文描述的“myarray的”一个整数,但一个字符串: -

  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 

因此,它更好,使用安全泛型列表集合而不是ArrayList。

+0

谢谢拉胡尔的解释。更让我困惑的是,我尝试了int和string逻辑。我试过“30”和30都无济于事。 – 2014-10-29 06:32:30

+0

我注意到你现在正在使用'long'。如果你将'long'加入你的ArrayList,那就可以解释它。你无法将长方体与“int”进行比较。试试这个:'myArray.Add(30L); Console.WriteLine(myArray.IndexOf(30));' - 因为ArrayList包含一个'long'('30L'),它不会找到一个具有相同值('30')的'int'。 – Blorgbeard 2014-10-30 22:12:07