2014-10-29 128 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