Equatable.Generator
2.0.0
dotnet add package Equatable.Generator --version 2.0.0
NuGet\Install-Package Equatable.Generator -Version 2.0.0
<PackageReference Include="Equatable.Generator" Version="2.0.0" />
paket add Equatable.Generator --version 2.0.0
#r "nuget: Equatable.Generator, 2.0.0"
// Install Equatable.Generator as a Cake Addin #addin nuget:?package=Equatable.Generator&version=2.0.0 // Install Equatable.Generator as a Cake Tool #tool nuget:?package=Equatable.Generator&version=2.0.0
Equatable.Generator
Source generator for Equals
and GetHashCode
with attribute based control of equality implementation
Features
- Override
Equals
andGetHashCode
- Implement
IEquatable<T>
- Support
class
,record
andstruct
types - Support
EqualityComparer
per property via attribute - Attribute based control of equality implementation.
- Attribute comparers supported: String, Sequence, Dictionary, HashSet, Reference, and Custom
- No runtime dependencies. Library is compile time dependence only.
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:
- Target framework .NET Standard 2.0 or greater
- Project C#
LangVersion
8.0 or higher
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.
[Equatable]
Marks the class to generate overrides forEquals
andGetHashCode
The default comparer used in the implementation of Equals
and GetHashCode
is EqualityComparer<T>.Default
. Customize the comparer used with the following attributes.
[IgnoreEquality]
Ignore property inEquals
andGetHashCode
implementations[StringEquality]
Use specifiedStringComparer
when comparing strings[SequenceEquality]
UseEnumerable.SequenceEqual
to determine whether enumerables are equal[DictionaryEquality]
Use to determine if dictionaries are equal[HashSetEquality]
UseISet<T>.SetEquals
to determine whether enumerables are equal[ReferenceEquality]
UseObject.ReferenceEquals
to determines whether instances are the same instance[EqualityComparer]
Use the specifiedEqualityComparer
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; }
}
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
-
net8.0
- No dependencies.
-
net9.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
2.0.0 | 110 | 11/14/2024 |
1.1.0 | 465 | 9/7/2024 |
1.1.0-beta.1 | 51 | 9/7/2024 |
1.0.0 | 151 | 9/5/2024 |
1.0.0-beta.3 | 53 | 9/5/2024 |
1.0.0-beta.2 | 51 | 9/5/2024 |
1.0.0-beta.1 | 60 | 9/5/2024 |
1.0.0-alpha.2 | 52 | 9/4/2024 |
1.0.0-alpha.1 | 45 | 9/4/2024 |