private static bool EvaluateComparable()

in src/Microsoft.Xaml.Behaviors/ComparisonLogic.cs [89:136]


        private static bool EvaluateComparable(IComparable leftOperand, ComparisonConditionType operatorType, IComparable rightOperand)
        {
            object convertedOperand = null;

            try
            {
                convertedOperand = Convert.ChangeType(rightOperand, leftOperand.GetType(), CultureInfo.CurrentCulture);
            }
            catch (FormatException)
            {
                // FormatException: Convert.ChangeType("hello", typeof(double), ...);
            }
            catch (InvalidCastException)
            {
                // InvalidCastException: Convert.ChangeType(4.0d, typeof(Rectangle), ...);
            }

            if (convertedOperand == null)
            {
                return operatorType == ComparisonConditionType.NotEqual;
            }

            int comparison = ((IComparable)leftOperand).CompareTo((IComparable)convertedOperand);
            bool result = false;

            switch (operatorType)
            {
                case ComparisonConditionType.Equal:
                    result = comparison == 0;
                    break;
                case ComparisonConditionType.GreaterThan:
                    result = comparison > 0;
                    break;
                case ComparisonConditionType.GreaterThanOrEqual:
                    result = comparison >= 0;
                    break;
                case ComparisonConditionType.LessThan:
                    result = comparison < 0;
                    break;
                case ComparisonConditionType.LessThanOrEqual:
                    result = comparison <= 0;
                    break;
                case ComparisonConditionType.NotEqual:
                    result = comparison != 0;
                    break;
            }
            return result;
        }