Why not just use Linq methods?
public class MyClass
{
public int Id { get; set; }
public string Name { get; set; }
public override string ToString()
{
return $"ID: {Id}, Name: \"{Name}\"";
}
}
List<MyClass> items = new List<MyClass>();
items.Add(new MyClass() { Id = 1, Name = "One" });
items.Add(new MyClass() { Id = 2, Name = "Two" });
items.Add(new MyClass() { Id = 2, Name = "Two Again" });
items.Add(new MyClass() { Id = 1, Name = "One Again" });
items.Add(new MyClass() { Id = 3, Name = "Three" });
var duplicates = items.GroupBy(x => x.Id).SelectMany(g => g.Skip(1));
Console.WriteLine($"Duplicates exist:\n {string.Join("\n ", duplicates)}");
Run that, and you get a list of duplicates:
Duplicates exist:
ID: 1, Name: "One Again"
ID: 2, Name: "Two Again"