LINQ中的Contains和Any有什么区别?

时间:2014-05-07 19:36:12

标签: c# linq

LINQ中ContainsAny之间有什么区别?

5 个答案:

答案 0 :(得分:35)

Contains接受一个对象,Any接受一个谓词。

您可以像这样使用Contains

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

ContainsAny

的MSDN

答案 1 :(得分:8)

Contains检查序列是否包含指定的元素。

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);

答案 2 :(得分:5)

包含关注源集合是ICollection任何不是。

<强> 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;
}

答案 3 :(得分:0)

Contains

  

使用默认的相等比较器确定序列是否包含指定的元素。

Any

  

确定序列是否包含任何元素。

至于文件:

  

似乎找不到任何关于它的文档。

所有(大多数?)LINQ扩展方法:here

答案 4 :(得分:0)

here的另一个不同之处在于性能

  • Contains对于List是O(n),对于HashSet是O(1)
  • Any就是O(n)