一尘不染

.NET是否可以检查List a是否包含List b中的所有项目?

c#

我有以下方法:

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中了,是这样吗?我是否在复制功能?

编辑:抱歉我没有事先声明我正在Mono版本2.4.2上使用此代码。


阅读 331

收藏
2020-05-19

共1个答案

一尘不染

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

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

这个检查是否有任何元件在b其不在a-然后反转的结果。

请注意,使该 方法 泛型而不是使类更传统,并且没有理由要求List<T>代替IEnumerable<T>-因此,这可能是更可取的:

public static class LinqExtras // Or whatever
{
    public static bool ContainsAllItems<T>(this IEnumerable<T> a, IEnumerable<T> b)
    {
        return !b.Except(a).Any();
    }
}
2020-05-19