/// <summary> /// </summary> /// <returns>s 0 if equal, -1 if this object is less than the parameter, +1 if it is greater /// </returns> public System.Int16 CompareTo(TVariant v) { System.Int16 ReturnValue; ReturnValue = 0; if ((TypeVariant == eVariantTypes.eDecimal) || (TypeVariant == eVariantTypes.eInteger) || (TypeVariant == eVariantTypes.eInt64) || (TypeVariant == eVariantTypes.eCurrency)) { if (ToDecimal() == v.ToDecimal()) { ReturnValue = 0; } else if (ToDecimal() < v.ToDecimal()) { ReturnValue = -1; } else { ReturnValue = +1; } } else if (TypeVariant == eVariantTypes.eDateTime) { ReturnValue = (short)System.DateTime.Compare(ToDate(), v.ToDate()); } else if (TypeVariant == eVariantTypes.eString) { // test if perhaps boolean values are compared; trouble is, yes and no and true and false are used if (ComparingBooleanValues(v)) { if (ToBool() == v.ToBool()) { ReturnValue = 0; } else if (ToBool() == false) { ReturnValue = -1; } else { ReturnValue = 1; } } else { ReturnValue = (short)String.Compare(ToString(), v.ToString()); } } else if (TypeVariant == eVariantTypes.eBoolean) { if (ToBool() == v.ToBool()) { ReturnValue = 0; } else if (ToBool() == false) { ReturnValue = -1; } else { ReturnValue = 1; } } else if (TypeVariant == eVariantTypes.eComposite) { // just compare the first elements ReturnValue = FirstCompositeValue().CompareTo(v.FirstCompositeValue()); } return ReturnValue; }