From fa514531bf75e52a66638dda2964d6c1cef6207d Mon Sep 17 00:00:00 2001 From: Syntriax Date: Tue, 3 Mar 2026 23:30:56 +0300 Subject: [PATCH] feat: added IIdentifiable comparison interface & IsIdentical extension method --- Engine.Core/Abstract/IIdentifiable.cs | 2 +- Engine.Core/BaseEntity.cs | 2 ++ Engine.Core/Extensions/IdentifiableExtensions.cs | 7 +++++++ 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 Engine.Core/Extensions/IdentifiableExtensions.cs diff --git a/Engine.Core/Abstract/IIdentifiable.cs b/Engine.Core/Abstract/IIdentifiable.cs index c4cd50a..403cace 100644 --- a/Engine.Core/Abstract/IIdentifiable.cs +++ b/Engine.Core/Abstract/IIdentifiable.cs @@ -3,7 +3,7 @@ namespace Engine.Core; /// /// Represents any instance in the engine with an id. /// -public interface IIdentifiable +public interface IIdentifiable : System.IComparable { /// /// Event triggered when the of the changes. diff --git a/Engine.Core/BaseEntity.cs b/Engine.Core/BaseEntity.cs index e259b21..87982f2 100644 --- a/Engine.Core/BaseEntity.cs +++ b/Engine.Core/BaseEntity.cs @@ -101,4 +101,6 @@ public abstract class BaseEntity : IEntity protected BaseEntity() => Id = Guid.NewGuid().ToString("D"); protected BaseEntity(string id) => Id = id; + + public int CompareTo(IIdentifiable? other) => Id.CompareTo(other?.Id); } diff --git a/Engine.Core/Extensions/IdentifiableExtensions.cs b/Engine.Core/Extensions/IdentifiableExtensions.cs new file mode 100644 index 0000000..35d7d02 --- /dev/null +++ b/Engine.Core/Extensions/IdentifiableExtensions.cs @@ -0,0 +1,7 @@ +namespace Engine.Core; + +public static class IdentifiableExtensions +{ + public static bool IsIdentical(this IIdentifiable? left, IIdentifiable? right) + => left?.CompareTo(right) == 0; +}