2010-02-18 151 views

回答

4

您可以通過.Intersect()模擬這種檢查在路口設置了所有必需的元素。我想這是相當低效但又快又髒。

List<T> list = ... 
List<T> shouldBeContained = ... 
bool containsAll = (list.Intersect(shouldBeContained).Count == shouldBeContained.Count) 

或者你可以用.All()來做到這一點。我想這是更有效的和更清潔:

List<T> list = ... 
List<T> shouldBeContained = ... 
bool containsAll = (shouldBeContained.All(x=>list.Contains(x)); 
0

LINQ的具有許多可用於檢查一組在另一個值中的存在的操作符。

我會用Intersect

Produces the set intersection of two sequences by using the default equality comparer to compare values.

0

雖然沒有什麼簡單的內置在...你總是可以創建擴展方法,使生活更輕鬆:

public static bool ContainsAny<T>(this IEnumerable<T> data, 
    IEnumerable<T> intersection) 
{ 
    foreach(T item in intersection) 
     if(data.Contains(item) 
      return true; 
    return false; 
} 

public static bool ContainsAll<T>(this IEnumerable<T> data, 
    IEnumerable<T> intersection) 
{ 
    foreach(T item in intersection) 
     if(!data.Contains(item)) 
      return false; 
    return true; 
}