簡體   English   中英

LINQ中的Contains和Any有什么區別?

[英]What is the difference between Contains and Any in LINQ?

LINQ中的ContainsAny什么區別?

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 for ContainsAny

如果序列包含指定的元素,則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);

包含關於源集合是否為ICollectionAny不關心。

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

包含

使用默認的相等比較器確定序列是否包含指定的元素。

任何

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

至於文件:

似乎找不到任何關於它的文檔。

所有(大多數?)LINQ擴展方法: 這里

這里提到的另一個不同之在於性能

  • Contains List O(n)和HashSet O(1)
  • Any只是O(n)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM