DesignTimePropertyAttributes GetDesignTimePropertyAttributes(PropertyInfo propertyInfo)
        {
            DesignTimePropertyAttributes result = new DesignTimePropertyAttributes();

            PrecisionAttribute numDigitsAttribute = propertyInfo.GetCustomAttribute <PrecisionAttribute>();

            if (numDigitsAttribute != null)
            {
                result.NumDigits = numDigitsAttribute.NumDecimalPlaces;
            }

            DisplayTextAttribute displayTextAttribute = propertyInfo.GetCustomAttribute <DisplayTextAttribute>();

            if (displayTextAttribute != null)
            {
                result.DisplayText = displayTextAttribute.DisplayText;
            }

            DependentPropertyAttribute dependentPropertyAttribute = propertyInfo.GetCustomAttribute <DependentPropertyAttribute>();

            if (dependentPropertyAttribute != null)
            {
                result.DependentProperty = dependentPropertyAttribute.DependentProperty;
            }

            return(result);
        }
        void CreateComparison(object instance, PropertyInfo propertyInfo, DesignTimePropertyAttributes propertyAttributes)
        {
            PropertyValueData propertyValueData = new PropertyValueData(instance, propertyInfo, propertyAttributes.DisplayText, propertyAttributes.NumDigits, propertyAttributes.DependentProperty);

            propertyValueData.FirstInstance = instance;
            Comparisons.Add(propertyValueData);
        }
        public void Compare(object stampProperties)
        {
            PropertyInfo[] properties = stampProperties.GetType().GetProperties();
            foreach (PropertyInfo propertyInfo in properties)
            {
                if (!ReflectionHelper.IsEditable(propertyInfo))
                {
                    continue;
                }

                DesignTimePropertyAttributes designTimePropertyAttributes = GetDesignTimePropertyAttributes(propertyInfo);

                PropertyValueData existingComparison = GetComparison(propertyInfo.Name);
                if (existingComparison == null)
                {
                    CreateComparison(stampProperties, propertyInfo, designTimePropertyAttributes);
                }
                else
                {
                    existingComparison.Compare(stampProperties, propertyInfo);
                }
            }
        }