Search code examples
c#linqienumerable

Check IEnumerable<T> for items having duplicate properties


How to check if an IEnumerable has two or more items with the same property value ?

For example a class

public class Item
{
    public int Prop1 {get;set;}
    public string Prop2 {get;set;}
}

and then a collection of type IEnumerable<Item>

I need to return false if there are items with duplicate values in Prop1.


Solution

  • I think this method will work.

    public static bool ContainsDuplicates<T1>(this IEnumerable<T1> source, Func<T1, T2> selector)
    {
        var d = new HashSet<T2>();
        foreach(var t in source)
        {
            if(!d.Add(selector(t)))
            {
                return true;
            }
        }
        return false;
    }