Home

Awesome

Equatable.Generator

Source generator for Equals and GetHashCode with attribute based control of equality implementation

Build Project

Coverage Status

Equatable.Generator

Features

Usage

Add package

Add the nuget package to your projects.

dotnet add package Equatable.Generator

Prevent including Equatable.Generator as a dependency

<PackageReference Include="Equatable.Generator" PrivateAssets="all" />

Requirements

This library requires:

Equatable Attributes

Place [Equatable] attribute on a class, record or struct. The source generator will create a partial with overrides for Equals and GetHashCode for all public properties.

The default comparer used in the implementation of Equals and GetHashCode is EqualityComparer<T>.Default. Customize the comparer used with the following attributes.

Example Usage

Example of using the attributes to customize the source generation of Equals and GetHashCode

[Equatable]
public partial class UserImport
{
    [StringEquality(StringComparison.OrdinalIgnoreCase)]
    public string EmailAddress { get; set; } = null!;

    public string? DisplayName { get; set; }

    public string? FirstName { get; set; }

    public string? LastName { get; set; }

    public DateTimeOffset? LockoutEnd { get; set; }

    public DateTimeOffset? LastLogin { get; set; }

    [IgnoreEquality]
    public string FullName => $"{FirstName} {LastName}";

    [HashSetEquality]
    public HashSet<string>? Roles { get; set; }

    [DictionaryEquality]
    public Dictionary<string, int>? Permissions { get; set; }

    [SequenceEquality]
    public List<DateTimeOffset>? History { get; set; }
}