private bool CompareValue(Comparison comparison, Object operand, Object value) { if (operand == null) { return (comparison.ContainedWithin(Comparison.Null, Comparison.NullOrEmpty) || ((comparison == Comparison.EqualTo) && (value == null))); } if (!comparison.IsOperandOnlyComparison()) { if (value == null) { return false; } GetComparisonValues(ref operand, ref value); } var stringOperand = operand as string; if (stringOperand != null) { var typedValue = Convert.ToString(value); return CompareString(comparison, stringOperand, typedValue); } var comparableOperand = operand as IComparable; if (comparableOperand != null) { var type = comparableOperand.GetType(); var typedValue = (IComparable)Convert.ChangeType(value, type); return CompareComparable(comparison, comparableOperand, typedValue); } return comparison == Comparison.EqualTo && Equals(operand, value); }