如何最好地检查ArrayList中是否存在任何值?

4

我有一个 ArrayList

我想要检查这个 ArrayList 中是否存在任何值。

我想使用 Any 方法(来自 System.Linq 命名空间),但是我只能在 Array 上使用它,而不能在 ArrayList 上使用。

有没有一种有效的方法来检查这个问题?


4
为什么你仍然使用 ArrayList 而不是泛型的 List<T> - Tim Schmelter
因为这是旧代码,使用了ArrayList。 - GrzesiekO
5
那就修理它,而不是让它坏着。 - Servy
如果可以的话,我会修复它 :) 这不是我的代码,所以我不能更改这些对象.... - GrzesiekO
3个回答

8

你可以检查 .Count > 0。但更好的选择是停止使用 ArrayList。既然你了解 Any()System.Linq,我假设你不使用 .NET 1.1;因此,使用 List<T> 替换一些 T,所有问题都将得到解决。这具有完整的 LINQ-to-Objects 使用,并且只是一个更好的想法。

List<int> myInts = ...
bool anyAtAll = myInts.Any();
bool anyEvens = myInts.Any(x => (x % 2) == 0);
// etc

1
使用链接.Cast方法将您的数组列表转换为通用类型。
ArrayList ar = new ArrayList();

bool hasItem = ar.Cast<int>().Any( i => i == 1);

@MarcGravell:我认为你可以将Contains()解释为符合Any的定义:“确定序列中是否有任何元素满足条件。”如果它被包含在内,则满足条件。即使Contains()没有提供表达式。 - user195488
@OA0D请告诉我如何使用“Contains”来测试“列表中是否有名字以A开头的人”,然后我开始:bool b = list.Any(p => p.Name.StartsWith("A")); - 轮到你了... - Marc Gravell
@MarcGravell 无论如何,我已经修复了它。 - Sam I am says Reinstate Monica
@MarcGravell:在那种情况下你不能这样做,但在OP的情况下,Contains和Any可能意味着相同的事情。 - user195488

0

你可以使用 ArrayList.Count 属性来获取数组中对象的数量。如果它等于 0,则表示其中没有任何内容。


ArrayListCount,而不是 Count()EnumerableCount,但仅适用于 IEnumerable<T> - Marc Gravell
但是 Count() 给我所有的元素。我只想检查是否存在一个或多个元素。 - GrzesiekO
是的,Count 可以给出数组中元素的数量,这样你就可以进行比较了。例如,如果 (ArrayList.Count > 0),那么数组中就有一些东西。如果不是,那么它里面没有任何内容。 - William Proulx
但是我在考虑效率。Count和Any之间有很大的区别,Any更快。 - GrzesiekO

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接