检查列表<T>是否有要排除的可选单词的重复

Din*_*in2 4 c#

我有一个方法如下.当列表包含重复项时,方法返回false/true.我想扩展我的方法,例如(可选)我想从检查中排除特定项目.例如,我想检查整个列表,因为它现在或我想说例如exclude:string.empty items或例如string.empty和"some word".可能吗?

public static bool IsListContainsDuplicates<T>(List<T> list)
{
    return list.GroupBy(n => n).Any(c => c.Count() > 1);
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*ter 7

public static bool ContainsDuplicates<T>(this IEnumerable<T> items, IEnumerable<T> itemsToExclude = null)
{
    if (itemsToExclude == null) itemsToExclude = Enumerable.Empty<T>();
    return items.Except(itemsToExclude)
                .GroupBy(n => n)
                .Any(c => c.Count() > 1);
}
Run Code Online (Sandbox Code Playgroud)

但我更喜欢这种实现方式,因为它更具性能:

public static bool ContainsDuplicates<T>(this IEnumerable<T> items, IEnumerable<T> itemsToExclude = null)
{
    if (itemsToExclude == null) itemsToExclude = Enumerable.Empty<T>();
    HashSet<T> set = new HashSet<T>();
    return !items.Except(itemsToExclude).All(set.Add);
}
Run Code Online (Sandbox Code Playgroud)