public EquivalencyResult Handle(Comparands comparands, IEquivalencyValidationContext context, IEquivalencyValidator nestedValidator)
        {
            Type             expectationType = comparands.GetExpectedType(context.Options);
            EqualityStrategy strategy        = context.Options.GetEqualityStrategy(expectationType);

            bool canHandle = (strategy == EqualityStrategy.Equals) || (strategy == EqualityStrategy.ForceEquals);

            if (canHandle)
            {
                context.Tracer.WriteLine(member =>
                {
                    string strategyName = (strategy == EqualityStrategy.Equals)
                        ? "Equals must be used" : "object overrides Equals";

                    return($"Treating {member.Description} as a value type because {strategyName}.");
                });

                comparands.Subject.Should().Be(comparands.Expectation, context.Reason.FormattedMessage, context.Reason.Arguments);

                return(EquivalencyResult.AssertionCompleted);
            }
            else
            {
                return(EquivalencyResult.ContinueWithNext);
            }
        }
        /// <summary>
        /// Gets a value indicating whether this step can handle the current subject and/or expectation.
        /// </summary>
        public bool CanHandle(IEquivalencyValidationContext context, IEquivalencyAssertionOptions config)
        {
            Type             type     = config.GetExpectationType(context);
            EqualityStrategy strategy = config.GetEqualityStrategy(type);

            bool canHandle = (strategy == EqualityStrategy.Equals) || (strategy == EqualityStrategy.ForceEquals);

            if (canHandle)
            {
                context.TraceSingle(path =>
                {
                    string strategyName = (strategy == EqualityStrategy.Equals)
                        ? "Equals must be used" : "object overrides Equals";

                    return($"Treating {path} as a value type because {strategyName}.");
                });
            }

            return(canHandle);
        }