在LINQ中,Contains
和Any
有什么区别?
在LINQ中,Contains
和Any
有什么区别?
listOFInts.Contains(1);
和Any
这样的任何内容:
listOfInts.Any(i => i == 1);
listOfInts.Any(i => i % 2 == 0); // Check if any element is an Even Number
因此,如果您想检查特定条件,请使用Any
。如果您想检查元素的存在,请使用Contains
。
Struct
或Object
,具体取决于集合的定义方式... - JJSint
、一个string
、一些结构体或者一个MyClass
。当然,你是正确的。 - BradleyDotNETContains
检查序列是否包含指定的元素。
Enumerable.Any
检查序列中的任意一个元素是否满足条件。
考虑以下示例:
List<int> list = new List<int> { 1, 2, 3, 4, 5 };
bool contains = list.Contains(1); //true
bool condition = list.Any(r => r > 2 && r < 5);
Contains 关注源集合是否为 ICollection
,Any 则不关心。
Enumerable.Contains http://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs#f60bab4c5e27a849
public static bool Contains<TSource>(this IEnumerable<TSource> source, TSource value)
{
ICollection<TSource> collection = source as ICollection<TSource>;
if (collection != null)
{
return collection.Contains(value);
}
return source.Contains<TSource>(value, null);
}
Enumerable.Any http://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs#6a1af7c3d17845e3
public static bool Any<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
{
foreach (TSource local in source)
{
if (predicate(local))
{
return true;
}
}
return false;
}
如此处所述,另一个不同之处在于性能方面
Contains
对于List
是O(n),对于HashSet
是O(1)Any
简单地是O(n)Enumerable.Contains<T>
,而不是接口方法 ICollection<T>.Contains
。 - Theodor Zoulias