2011-06-13 57 views
0

在我的代碼中,我有一個名爲heart的數組列表,其中包含1-13的數字。c#搜索arraylist問題

heart.Add("any"); 

for(int i = 0; i < 14; i++) 
{ 
    heart.Add(i); 
} 

正如您所見,它還包含放置在第一個元素中的「any」。當我使用這段代碼來獲取大於5的所有元素時,我得到一個錯誤。

int store = heart.Cast<int>().Where(item => item > 5).Count().ToString(); 

我得到的錯誤「指定的轉換無效」,這是因爲 「任何」我的第一個元素的。有誰能幫我解決這個問題嗎?

+0

[c#searching arraylist]可能的重複(http://stackoverflow.com/questions/6329849/c-searching-an-arraylist) – 2011-06-13 13:03:54

+0

不要發佈後續任務作爲新問題。你可以編輯你的第一個。 – 2011-06-13 13:04:55

回答

4

這聽起來像你只需要OfType方法代替:

string store = heart.OfType<int>().Where(item => item > 5).Count().ToString(); 

OfType只返回它們是選擇恰當類型的值,無視他人。請參閱我的Edulinq blog post on it瞭解更多信息。

由於斯文顯示,你也可以使用的Count這需要一個謂語超載,除去Where電話:

string store = heart.OfType<int>().Count(item => item > 5).ToString(); 

(我已經改變了給你調用ToString的變量類型最後...再次,你可能想要考慮這個決定,這取決於你當然如何使用它。)

但是,我會強烈建議你使用強類型集合而不是ArrayList。想想集合是什麼意思 - 保持字符串和整數似乎很奇怪。你想用它做什麼?

3

使用這個代替:

int count = heart.OfType<int>().Count(item => item > 5); 

OfType將過濾列表,只返回正確的類型它試圖施放的所有元素的那些元素,而不是Cast

+0

謝謝你的工作! – laz 2011-06-13 12:57:57

0

您不能將單詞「任何」轉換爲整數,這非常簡單。

我們必須確切知道你在這裏做什麼,以及如何使用這個數組來真正給出一個好的建議。

+0

你好,我明白了。感謝您的回答,我得到了它的工作! :) – laz 2011-06-13 12:58:40

+0

這應該是一個評論而不是答案。 – 2011-06-13 12:59:10

0

你可以做

Int store = heart.GetRange(1, heart.Count - 1).Cast<int>().Where(item => item > 5).Count().ToString(); 
0

由於您使用int和你想的1-13價值觀,我可能會建議你使用的0一個int值來表示「任意」?