RSCG – GeneratorEquals
RSCG – GeneratorEquals
name | GeneratorEquals |
nuget | https://www.nuget.org/packages/Generator.Equals/ |
link | https://github.com/diegofrata/Generator.Equals |
author | Diego Frato |
Generating Equals from properties
This is how you can use GeneratorEquals .
The code that you start with is
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net7.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> </PropertyGroup> <ItemGroup> <PackageReference Include="Generator.Equals" Version="3.0.0" /> </ItemGroup> <PropertyGroup> <EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles> <CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath> </PropertyGroup> </Project>
The code that you will use is
// See https://aka.ms/new-console-template for more information using GeneratorEqualsDemo; var p1 = new Person() { ID = 1, FirstName = "Andrei", LastName = "Ignat" }; var p2= new Person() { ID = 2, FirstName = "Andrei", LastName = "Ignat" }; Console.WriteLine(p1==p2);
using Generator.Equals; namespace GeneratorEqualsDemo; [Equatable] partial class Person { [IgnoreEquality] public int ID { get; set; } [DefaultEquality] public string? FirstName { get; set; } [DefaultEquality] public string? LastName { get; set; } }
The code that is generated is
#nullable enable #pragma warning disable CS0612,CS0618 #pragma warning disable CS0436 namespace GeneratorEqualsDemo { partial class Person : global::System.IEquatable<Person> { /// <summary> /// Indicates whether the object on the left is equal to the object on the right. /// </summary> /// <param name="left">The left object</param> /// <param name="right">The right object</param> /// <returns>true if the objects are equal; otherwise, false.</returns> [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")] public static bool operator ==( global::GeneratorEqualsDemo.Person? left, global::GeneratorEqualsDemo.Person? right) => global::Generator.Equals.DefaultEqualityComparer<global::GeneratorEqualsDemo.Person?>.Default .Equals(left, right); /// <summary> /// Indicates whether the object on the left is not equal to the object on the right. /// </summary> /// <param name="left">The left object</param> /// <param name="right">The right object</param> /// <returns>true if the objects are not equal; otherwise, false.</returns> [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")] public static bool operator !=(global::GeneratorEqualsDemo.Person? left, global::GeneratorEqualsDemo.Person? right) => !(left == right); /// <inheritdoc/> [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")] public override bool Equals(object? obj) => Equals(obj as global::GeneratorEqualsDemo.Person); /// <inheritdoc/> [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")] bool global::System.IEquatable<global::GeneratorEqualsDemo.Person>.Equals(global::GeneratorEqualsDemo.Person? obj) => Equals((object?) obj); /// <inheritdoc/> [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")] protected bool Equals(global::GeneratorEqualsDemo.Person? other) { if (ReferenceEquals(null, other)) return false; if (ReferenceEquals(this, other)) return true; return other.GetType() == this.GetType() && global::Generator.Equals.DefaultEqualityComparer<global::System.String?>.Default.Equals(this.FirstName!, other.FirstName!) && global::Generator.Equals.DefaultEqualityComparer<global::System.String?>.Default.Equals(this.LastName!, other.LastName!) ; } /// <inheritdoc/> [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")] public override int GetHashCode() { var hashCode = new global::System.HashCode(); hashCode.Add(this.GetType()); hashCode.Add( this.FirstName!, global::Generator.Equals.DefaultEqualityComparer<global::System.String?>.Default); hashCode.Add( this.LastName!, global::Generator.Equals.DefaultEqualityComparer<global::System.String?>.Default); return hashCode.ToHashCode(); } } }
Code and pdf at
https://ignatandrei.github.io/RSCG_Examples/v2/docs/GeneratorEquals
Leave a Reply