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