🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
47 lines
1.1 KiB
C#
47 lines
1.1 KiB
C#
namespace ColaFlow.Shared.Kernel.Common;
|
|
|
|
/// <summary>
|
|
/// Base class for all value objects
|
|
/// </summary>
|
|
public abstract class ValueObject
|
|
{
|
|
protected abstract IEnumerable<object> GetAtomicValues();
|
|
|
|
public override bool Equals(object? obj)
|
|
{
|
|
if (obj == null || obj.GetType() != GetType())
|
|
return false;
|
|
|
|
var other = (ValueObject)obj;
|
|
return GetAtomicValues().SequenceEqual(other.GetAtomicValues());
|
|
}
|
|
|
|
public override int GetHashCode()
|
|
{
|
|
return GetAtomicValues()
|
|
.Aggregate(1, (current, obj) =>
|
|
{
|
|
unchecked
|
|
{
|
|
return (current * 23) + (obj?.GetHashCode() ?? 0);
|
|
}
|
|
});
|
|
}
|
|
|
|
public static bool operator ==(ValueObject? a, ValueObject? b)
|
|
{
|
|
if (a is null && b is null)
|
|
return true;
|
|
|
|
if (a is null || b is null)
|
|
return false;
|
|
|
|
return a.Equals(b);
|
|
}
|
|
|
|
public static bool operator !=(ValueObject? a, ValueObject? b)
|
|
{
|
|
return !(a == b);
|
|
}
|
|
}
|