c#搜索数组列表问题
本文关键字:问题 列表 数组 搜索 | 更新日期: 2023-09-27 17:58:56
在我的代码中,我有一个名为heart的数组列表,它包含1-13的数字。
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();
我得到错误"指定的强制转换无效",这是因为我在第一个元素中有"any"。有人能帮我修一下吗?
听起来你只需要OfType
方法:
string store = heart.OfType<int>().Where(item => item > 5).Count().ToString();
OfType
只返回适当类型的值,忽略其他值。有关更多信息,请参阅我的Edulinq博客文章。
如Sven所示,您还可以使用Count
的重载(它接受一个谓词)来删除Where
调用:
string store = heart.OfType<int>().Count(item => item > 5).ToString();
(鉴于您在最后调用ToString
,我已经更改了变量类型……再次,您可能需要考虑这个决定。当然,这取决于您如何使用它。)
但是,我强烈建议您使用强类型集合,而不是ArrayList
。想想这个集合应该包含什么——同时包含字符串和整数似乎很奇怪。你想用它做什么?
改为使用这个:
int count = heart.OfType<int>().Count(item => item > 5);
OfType
将过滤列表并只返回正确类型的元素,而不是尝试强制转换所有元素的Cast
。
不能将单词"any"强制转换为整数,这是非常直接的。
我们必须确切地知道你在这里试图做什么,以及如何使用数组来真正给出好的建议。
由于您使用的是int
,并且需要1-13的值,我可以建议您使用0的int值来表示"any"吗?
您可以进行
Int store = heart.GetRange(1, heart.Count - 1).Cast<int>().Where(item => item > 5).Count().ToString();