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;
}