sometimes you don't want to compare all public properties and want to compare only the subset of them, so in this case you can just move logic to compare the desired list of properties to abstract class
public abstract class ValueObject where T : ValueObject
{
protected abstract IEnumerable
and use this abstract class later to compare the objects
public class Meters : ValueObject
{
...
protected decimal DistanceInMeters { get; private set; }
...
protected override IEnumerable