Your construct would mean that the <> and != operators would fail as well. (n <> '' and n != '' should be valid).
I've used the following workaround, but IMO a more stable fix has to be devised.
if (UserValue != "")
{
if (TypeOfValue == typeof(int))
{
Rt = IsOk((int)ObjectPropertyValue, Operator, (int)Convert.ToInt32(FilterValue));
}
else if (TypeOfValue == typeof(double))
{
Rt = IsOk((double)ObjectPropertyValue, Operator, (double)Convert.ToDouble(FilterValue));
}
else if (TypeOfValue == typeof(decimal))
{
Rt = IsOk((decimal)ObjectPropertyValue, Operator, (decimal)Convert.ToDecimal(FilterValue));
}
else if (TypeOfValue == typeof(DateTime))
{
Rt = IsOk((DateTime)ObjectPropertyValue, Operator, (DateTime)Convert.ToDateTime(FilterValue));
}
else if (TypeOfValue == typeof(bool))
{
Rt = IsOk((bool)ObjectPropertyValue, Operator, (bool)Convert.ToBoolean(FilterValue));
}
else if (TypeOfValue == typeof(Guid))
{
Rt = IsOk((Guid)ObjectPropertyValue, Operator, new Guid(FilterValue.ToString()));
}
else if (TypeOfValue == typeof(decimal))
{
Rt = IsOk((decimal)ObjectPropertyValue, Operator, (decimal)Convert.ToDecimal(FilterValue));
}
else if (TypeOfValue == typeof(byte))
{
Rt = IsOk((byte)ObjectPropertyValue, Operator, (byte)Convert.ToByte(FilterValue));
}
else if (TypeOfValue == typeof(long))
{
Rt = IsOk((long)ObjectPropertyValue, Operator, (long)Convert.ToInt64(FilterValue));
}
else if (TypeOfValue == typeof(System.Int16))
{
Rt = IsOk((System.Int16)ObjectPropertyValue, Operator, (System.Int16)Convert.ToInt16(FilterValue));
}
else
{
throw new Exception("Filtering is not possible on the type " + TypeOfValue.ToString());
}
}
else
{
// FilterValue is empty, conversion would lead to errors. Treat as string
Rt = IsOk(ObjectPropertyValue.ToString(), Operator, FilterValue.ToString());
}
Regards,
Ewart