В чем разница между Contains и Any в LINQ?

В чем разница между Contains и Any в LINQ?

Ответ 1

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.

MSDN для Содержит, Любые

Ответ 2

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

Ответ 3

Содержит заботится о том, является ли исходная коллекция 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;
}

Ответ 4

Содержит

Определяет, содержит ли последовательность указанный элемент, используя сопоставитель равенства по умолчанию.

Любые

Определяет, содержит ли последовательность какие-либо элементы.

Что касается документации:

Кажется, не найдено, чтобы найти документацию.

Все (большинство?) методов расширения LINQ: здесь