using System.Collections.Generic;
public static void Main()
List<MyClass> list = new List<MyClass>();
list.Add(new MyClass(){ Text = "A", Flag = true , Number = 10});
list.Add(new MyClass(){ Text = "A", Flag = false , Number = 1});
list.Add(new MyClass(){ Text = "A", Flag = false , Number = 8});
list.Add(new MyClass(){ Text = "B", Flag = true , Number = 10});
var dupText = FindDuplicates<MyClass, string>(list, nameof(MyClass.Text));
var dupFlag = FindDuplicates<MyClass, bool>(list, nameof(MyClass.Flag));
var dupNumber = FindDuplicates<MyClass, int>(list, nameof(MyClass.Number));
public static IEnumerable<TReturn> FindDuplicates<TList, TReturn>(IEnumerable<TList> list, string propertyName)
return (IEnumerable<TReturn>)list
.GroupBy(x => x.GetType().GetProperty(propertyName).GetValue(x))
.Where(g => g.Count() > 1)
.Select(x => (TReturn)x.Key);
public string Text {get;set;}
public bool Flag {get;set;}
public int Number {get;set;}