2012-01-16 77 views
2

我有這樣的代碼:指數超出範圍。必須爲非負且小於集合的大小

ArrayList list = new ArrayList(); 
foreach (DataRow dataR in prenume.Rows) 
{ 
    foreach (var item in dataR.ItemArray) 
    { 
     if (item.Equals(" ")) continue; 
     list.Add(item); 
     if (input_string.Equals(item.ToString()) && list.Count > 0) 
     { 
      label_hello.Text = "Hello, " + list[2]; 
     } 
    } 
} 

當我試圖清除文本顯示,我得到它說的錯誤:

指數超出範圍。必須是非負值,並且小於集合的大小 。

後來編輯:

 Solution found!I was too tired ... sorry for the question! 

回答

3

那麼,你有一個空表開始,然後添加一個項目後,你可能會執行(如果input_string等於第一項數組中的第一項) :

label_hello.Text = "Hello, " + list[2]; 

這是試圖訪問該列表中的第三項目。只有一個項目時它會失敗。你爲什麼在這裏選擇2

(?順便說一句,你爲什麼要使用ArrayList通用List<T>型是首選。)

目前尚不清楚你在做什麼試圖實現 - 如果你可以給我們更多的情況下,我們有更好的幫助你的機會。

編輯:從評論,它看起來像這應該是

label_hello.Text = "Hello, " + dataR[2]; 

不過,我懷疑的循環仍然沒有正確的...爲什麼你要在表格上遍歷每個值,而不是(只)在一列中?

+0

因爲這是我想編寫的arraylist的元素。 – 2012-01-16 19:57:45

+0

@EmilDumbazu:但是該列表不包含*三個元素 - 第一次進入此語句時,該列表將只包含一個元素。那麼第三個元素怎麼能成爲你想要的呢? – 2012-01-16 19:58:41

+0

代碼在文本框中的文本發生更改時執行。並且該列表具有與字符一樣多的元素.... – 2012-01-16 20:05:47

2

當然它會給出錯誤。

label_hello.Text = "Hello, " + list[2]; 

是錯誤的。 您在該階段只有一個元素列表[0]。

+0

我明白了......但是我的工作方式正是如此。 – 2012-01-16 20:01:11

+3

如果它的工作原理完全符合你的要求,你爲什麼要問?如果你想*這個例外,你爲什麼要問這個問題? – 2012-01-16 20:12:03

+1

+1簡介**?!**答案... – gdoron 2012-01-16 20:16:51

1

你得到下一行的錯誤

label_hello.Text = "Hello, " + list[2]; 

爲什麼你得到這個錯誤的原因是因爲沒有列表[2]

現在,我不能告訴正是你想要做的,但我有一個鬼鬼祟祟的懷疑,你打算'項目'是某種類型的字符串,並且你想訪問該字符串中的第三個字符。

即使如此,請記住,有時用戶可能會嘗試輸入長度不超過3個或更多字符的字符串。

如果您可以提供更多關於您要做什麼的詳細信息,我們可以爲您提供更多幫助。

+0

我解決了這個問題。謝謝。 – 2012-01-16 20:27:16

相關問題