0Pricing
C# Academy · Lesson

Record-like types & value-based equality (pattern)

Implement value-based equality like records: override Equals/GetHashCode, implement IEquatable , add ==/!= operators, and keep types immutable.

Record-like overview

Goal: Make objects compare by value (record-like) in C# 6.

  • Immutable data
  • Override Equals and GetHashCode
  • Implement IEquatable<T>
  • Optional: define ==/!=

Reference equality issue

Classes compare by reference by default. Two objects with the same data are not equal.

using System;

public class PersonRef
{
  public string First;
  public string Last;
}

public class Program
{
  public static void Main(string[] args)
  {
    PersonRef a = new PersonRef { First = "Ada", Last = "Lovelace" };
    PersonRef b = new PersonRef { First = "Ada", Last = "Lovelace" };

    Console.WriteLine("Reference Equals? " + object.ReferenceEquals(a, b)); // false
    Console.WriteLine("== (default)? " + (a == b)); // false (same as ReferenceEquals for classes)
  }
}

All lessons in this course

  1. Structs: value semantics & immutability pattern
  2. Record-like types & value-based equality (pattern)
  3. Enums & [Flags]
← Back to C# Academy