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"。有人能帮我修一下吗?

c#搜索数组列表问题

听起来你只需要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();