В чем разница между 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
.
Ответ 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: здесь