using System.Collections.Generic;
public static void Main()
var authors1 = new List<Author>() {
new Author() { FirstName="John", LastName="Doe" },
new Author() { FirstName="John", LastName="Doe" },
new Author() { FirstName="Jane", LastName="Doe" },
new Author() { FirstName="Jane", LastName="Doe" }
authors1.Distinct().Dump();
var authors2 = new List<DistinctAuthor>() {
new DistinctAuthor() { FirstName="John", LastName="Doe" },
new DistinctAuthor() { FirstName="John", LastName="Doe" },
new DistinctAuthor() { FirstName="Jane", LastName="Doe" },
new DistinctAuthor() { FirstName="Jane", LastName="Doe" }
authors2.Distinct().Dump();
public string FirstName { get; set; }
public string LastName { get; set; }
public class DistinctAuthor : IEquatable<DistinctAuthor>
public string FirstName { get; set; }
public string LastName { get; set; }
public bool Equals(DistinctAuthor other)
if (FirstName == other.FirstName && LastName == other.LastName)
public override int GetHashCode()
int hashFirstName = FirstName == null ? 0 : FirstName.GetHashCode();
int hashLastName = LastName == null ? 0 : LastName.GetHashCode();
return hashFirstName ^ hashLastName;