/// <summary>
        /// Indicates whether the current value is equal to another object.
        /// </summary>
        /// <param name="obj">An object to compare with the current value.</param>
        /// <returns><c>true</c> if the current value is equal to object; otherwise, <c>false</c>.</returns>
        public override bool Equals(object obj)
        {
            if (obj == null)
            {
                return(false);
            }
            object value = (obj is PSObject) ? ((PSObject)obj).BaseObject : obj;

            if (value is HsbColor32Normalized)
            {
                return(Equals((HsbColor32Normalized)value));
            }
            if (value is IHsbColorModel <byte> )
            {
                return(Equals((IHsbColorModel <byte>)value));
            }
            if (value is IHsbColorModel <float> )
            {
                return(Equals((IHsbColorModel <float>)value, false));
            }
            if (value is IRgbColorModel <byte> )
            {
                return(Equals((IRgbColorModel <byte>)value, false));
            }
            if (value is IRgbColorModel <float> )
            {
                return(Equals((IRgbColorModel <float>)value, false));
            }
            if (value is int)
            {
                return(Equals((int)value));
            }
            value = ColorExtensions.AsSimplestType(value);

            if (value is string)
            {
                return((string)value == ToString());
            }

            if (value is int)
            {
                return(ToAHSB() == (int)value);
            }

            if (value is float)
            {
                return(ToAHSB() == (float)value);
            }

            if (obj is PSObject && ColorExtensions.TryGetColor((PSObject)obj, out IColorModel color))
            {
                return(Equals(color.AsHsb32()));
            }
            return(false);
        }