public override bool Equals(object obj)
        {
            var a = obj as Address;

            if (a == null)
            {
                return(false);
            }
            // Addresses can be equal even if the case differs or the leading/trailing whitespace differs
            return(
                string.Equals(Address1?.Trim(), a.Address1?.Trim(), StringComparison.OrdinalIgnoreCase) &&
                string.Equals(Address2?.Trim(), a.Address2?.Trim(), StringComparison.OrdinalIgnoreCase) &&
                string.Equals(City?.Trim(), a.City?.Trim(), StringComparison.OrdinalIgnoreCase) &&
                string.Equals(ProvinceStateCode?.Trim(), a.ProvinceStateCode?.Trim(), StringComparison.OrdinalIgnoreCase) &&
                string.Equals(CountryCode?.Trim(), a.CountryCode?.Trim(), StringComparison.OrdinalIgnoreCase) &&
                string.Equals(OtherCountry?.Trim(), a.OtherCountry?.Trim(), StringComparison.OrdinalIgnoreCase) &&
                string.Equals(PostalZipCode?.Trim(), a.PostalZipCode?.Trim(), StringComparison.OrdinalIgnoreCase)
                );
        }