2011-06-13 66 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值来表示“任意”?