using System.Collections.Generic;
public static void Main()
var artifacts = new List<Artifact>()
List<int> duplicateArtifactIDs = GetDuplicates(artifacts.Select(a => a.ID));
if (!duplicateArtifactIDs.Any())
List<Artifact> duplicateArtifactsOriginal = artifacts.Where(x => duplicateArtifactIDs.Contains(x.ID)).ToList();
List<Artifact> duplicateArtifactsFix = artifacts.Where(x => duplicateArtifactIDs.Contains(x.ID)).Distinct(new ArtifactComparer()).ToList();
var duplicateArtifactsJake = new List<Artifact>();
foreach (int duplicateArtifactID in duplicateArtifactIDs)
Artifact duplicateArtifact = artifacts.First(a => a.ID == duplicateArtifactID);
duplicateArtifactsJake.Add(duplicateArtifact);
Console.WriteLine("duplicateArtifactsOriginal count: " + duplicateArtifactsOriginal.Count());
Console.WriteLine("duplicateArtifactsFix count: " + duplicateArtifactsFix.Count());
Console.WriteLine("duplicateArtifactsJake count: " + duplicateArtifactsJake.Count());
private static List<T> GetDuplicates<T>(IEnumerable<T> collection)
List<T> collectionList = collection.ToList();
IEnumerable<T> uniqueItems = collectionList.Distinct();
if (uniqueItems.Count() == collectionList.Count)
List<T> duplicateItems = collectionList
.Where(group => group.Count() > 1)
.Select(group => group.Key)
public int ID {get; set; }
public class ArtifactComparer : IEqualityComparer<Artifact>
public bool Equals(Artifact x, Artifact y)
public int GetHashCode(Artifact obj)
return obj.ID.GetHashCode();