.NET有一种方法来检查List a是否包含List b中的所有项目?

我有以下的方法:

namespace ListHelper { public class ListHelper<T> { public static bool ContainsAllItems(List<T> a, List<T> b) { return b.TrueForAll(delegate(T t) { return a.Contains(t); }); } } } 

其目的是确定列表是否包含另一个列表的所有元素。 在我看来,像这样的东西将被内置到.NET中,是这样的情况下,我是否复制function?

编辑:我很抱歉没有说明我在单声道版本2.4.2上使用此代码。

如果您使用的是.NET 3.5,那很简单:

 public static bool ContainsAllItems(List<T> a, List<T> b) { return !b.Except(a).Any(); } 

这检查b是否有任何不在b中的元素,然后反转结果。

只是为了好玩,@ JonSkeet的答案作为扩展方法:

 /// <summary> /// Does a list contain all values of another list? /// </summary> /// <remarks>Needs .NET 3.5 or greater. Source: https://stackoverflow.com/a/1520664/1037948 </remarks> /// <typeparam name="T">list value type</typeparam> /// <param name="containingList">the larger list we're checking in</param> /// <param name="lookupList">the list to look for in the containing list</param> /// <returns>true if it has everything</returns> public static bool ContainsAll<T>(this IEnumerable<T> containingList, IEnumerable<T> lookupList) { return ! lookupList.Except(containingList).Any(); } 

包含在.NET 4中: Enumerable.All

 public static bool ContainsAll<T>(IEnumerable<T> source, IEnumerable<T> values) { return values.All(value => source.Contains(value)); } 

你也可以用另一种方式。 重写equals并使用它

 public bool ContainsAll(List<T> a,List<T> check) { list l = new List<T>(check); foreach(T _t in a) { if(check.Contains(t)) { check.Remove(t); if(check.Count == 0) { return true; } } return false; } }