DEV Community

Cover image for C# - Record Structs for Immutable Value Types
Keyur Ramoliya
Keyur Ramoliya

Posted on

C# - Record Structs for Immutable Value Types

C# 10.0 introduced record structs, expanding the concept of records to value types. This feature is useful for creating immutable value types with value-based equality semantics, similar to record classes but with the performance characteristics of structs.

Here’s how you can use record structs in your C# projects:

  1. Declare Record Structs:
    Use the record struct keyword to define a record as a value type. This is beneficial for smaller, immutable types where you want value-based equality.

  2. Benefit from Built-in Functionality:
    Like record classes, record structs provide built-in functionality for value-based equality, ToString, GetHashCode, and Equals methods.

Example:

public record struct Point(double X, double Y);

public static void Main()
{
    var point1 = new Point(1.0, 2.0);
    var point2 = new Point(1.0, 2.0);

    Console.WriteLine(point1 == point2); // Output: True
    Console.WriteLine(point1); // Output: Point { X = 1, Y = 2 }
}
Enter fullscreen mode Exit fullscreen mode

In this example, Point is a record struct that automatically supports value-based equality. Two instances of Point with the same values are considered equal, and there's no need to manually override Equals or GetHashCode.

Record structs are particularly useful in scenarios where you need the immutability and equality behavior of records, but prefer the allocation efficiency of structs, such as in high-performance or memory-sensitive applications. They combine the best of both worlds from records and structs.

Image of Datadog

The Essential Toolkit for Front-end Developers

Take a user-centric approach to front-end monitoring that evolves alongside increasingly complex frameworks and single-page applications.

Get The Kit

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay