public static void Main()
courses.Distinct().Count().Dump();
courses[0].Equals(courses[2]).Dump();
courses[1].Equals(courses[2]).Dump();
new Grade{Course = courses[1]},
new Grade{Course = courses[1]},
new Grade{Course = courses[2]},
grades.Distinct().Count().Dump();
grades[0].Equals(grades[1]).Dump();
grades[2].Equals(grades[1]).Dump();
public string Name{get;set;}
public override bool Equals(object obj)
var other = obj as Course;
return String.Equals(this.Name, other.Name);
public override int GetHashCode()
return Name.GetHashCode();
public Course Course{get;set;}
public override bool Equals(object obj)
var other = obj as Grade;
return Course.Equals(other.Course);
public override int GetHashCode()
return Course.GetHashCode();