zeroframework/Services/DeviceCenter/ZeroFramework.DeviceCenter.Domain/Entities/ValueObject.cs

44 lines
1.2 KiB
C#
Raw Normal View History

2023-12-05 09:22:48 +00:00
namespace ZeroFramework.DeviceCenter.Domain.Entities
{
public abstract class ValueObject
{
protected static bool EqualOperator(ValueObject left, ValueObject right)
{
if (left is null ^ right is null)
{
return false;
}
return left is null || left.Equals(right);
}
protected static bool NotEqualOperator(ValueObject left, ValueObject right)
{
return !EqualOperator(left, right);
}
protected abstract IEnumerable<object> GetEqualityComponents();
public override bool Equals(object? obj)
{
if (obj == null || obj.GetType() != GetType())
{
return false;
}
var other = (ValueObject)obj;
return GetEqualityComponents().SequenceEqual(other.GetEqualityComponents());
}
public override int GetHashCode()
{
return GetEqualityComponents().Select(x => x != null ? x.GetHashCode() : 0).Aggregate((x, y) => x ^ y);
}
public ValueObject? GetCopy()
{
return MemberwiseClone() as ValueObject;
}
}
}