Exemple #1
0
        internal static int Compare(JTokenType valueType, object objA, object objB)
        {
            if (objA == null && objB == null)
            {
                return(0);
            }
            if (objA != null && objB == null)
            {
                return(1);
            }
            if (objA == null && objB != null)
            {
                return(-1);
            }
            switch (valueType)
            {
            case JTokenType.Comment:
            case JTokenType.String:
            case JTokenType.Raw:
                return(string.CompareOrdinal(Convert.ToString(objA, (IFormatProvider)CultureInfo.InvariantCulture), Convert.ToString(objB, (IFormatProvider)CultureInfo.InvariantCulture)));

            case JTokenType.Integer:
                if (objA is ulong || objB is ulong || (objA is Decimal || objB is Decimal))
                {
                    return(Convert.ToDecimal(objA, (IFormatProvider)CultureInfo.InvariantCulture).CompareTo(Convert.ToDecimal(objB, (IFormatProvider)CultureInfo.InvariantCulture)));
                }
                return(objA is float || objB is float || (objA is double || objB is double) ? JValue.CompareFloat(objA, objB) : Convert.ToInt64(objA, (IFormatProvider)CultureInfo.InvariantCulture).CompareTo(Convert.ToInt64(objB, (IFormatProvider)CultureInfo.InvariantCulture)));

            case JTokenType.Float:
                return(JValue.CompareFloat(objA, objB));

            case JTokenType.Boolean:
                return(Convert.ToBoolean(objA, (IFormatProvider)CultureInfo.InvariantCulture).CompareTo(Convert.ToBoolean(objB, (IFormatProvider)CultureInfo.InvariantCulture)));

            case JTokenType.Date:
                if (objA is DateTime dateTime)
                {
                    DateTime dateTime = !(objB is DateTimeOffset dateTimeOffset2) ? Convert.ToDateTime(objB, (IFormatProvider)CultureInfo.InvariantCulture) : dateTimeOffset2.DateTime;
                    return(dateTime.CompareTo(dateTime));
                }
                DateTimeOffset dateTimeOffset1 = (DateTimeOffset)objA;
                if (!(objB is DateTimeOffset other))
                {
                    other = new DateTimeOffset(Convert.ToDateTime(objB, (IFormatProvider)CultureInfo.InvariantCulture));
                }
                return(dateTimeOffset1.CompareTo(other));

            case JTokenType.Bytes:
                if (!(objB is byte[]))
                {
                    throw new ArgumentException("Object must be of type byte[].");
                }
                byte[] a1 = objA as byte[];
                byte[] a2 = objB as byte[];
                if (a1 == null)
                {
                    return(-1);
                }
                return(a2 == null ? 1 : MiscellaneousUtils.ByteArrayCompare(a1, a2));

            case JTokenType.Guid:
                if (!(objB is Guid guid))
                {
                    throw new ArgumentException("Object must be of type Guid.");
                }
                return(((Guid)objA).CompareTo(guid));

            case JTokenType.Uri:
                if ((object)(objB as Uri) == null)
                {
                    throw new ArgumentException("Object must be of type Uri.");
                }
                return(Comparer <string> .Default.Compare(((Uri)objA).ToString(), ((Uri)objB).ToString()));

            case JTokenType.TimeSpan:
                if (!(objB is TimeSpan timeSpan))
                {
                    throw new ArgumentException("Object must be of type TimeSpan.");
                }
                return(((TimeSpan)objA).CompareTo(timeSpan));

            default:
                throw MiscellaneousUtils.CreateArgumentOutOfRangeException(nameof(valueType), (object)valueType, "Unexpected value type: {0}".FormatWith((IFormatProvider)CultureInfo.InvariantCulture, (object)valueType));
            }
        }
        internal static int Compare(JTokenType valueType, object objA, object objB)
        {
            DateTime       dateTime;
            DateTimeOffset dateTimeOffset;

            if (objA == null && objB == null)
            {
                return(0);
            }
            if (objA != null && objB == null)
            {
                return(1);
            }
            if (objA == null && objB != null)
            {
                return(-1);
            }
            switch (valueType)
            {
            case JTokenType.Comment:
            case JTokenType.String:
            case JTokenType.Raw:
            {
                string str  = Convert.ToString(objA, CultureInfo.InvariantCulture);
                string str1 = Convert.ToString(objB, CultureInfo.InvariantCulture);
                return(string.CompareOrdinal(str, str1));
            }

            case JTokenType.Integer:
            {
                if (objA is ulong || objB is ulong || objA is decimal || objB is decimal)
                {
                    decimal num = Convert.ToDecimal(objA, CultureInfo.InvariantCulture);
                    return(num.CompareTo(Convert.ToDecimal(objB, CultureInfo.InvariantCulture)));
                }
                if (objA is float || objB is float || objA is double || objB is double)
                {
                    return(JValue.CompareFloat(objA, objB));
                }
                long num1 = Convert.ToInt64(objA, CultureInfo.InvariantCulture);
                return(num1.CompareTo(Convert.ToInt64(objB, CultureInfo.InvariantCulture)));
            }

            case JTokenType.Float:
            {
                return(JValue.CompareFloat(objA, objB));
            }

            case JTokenType.Boolean:
            {
                bool flag  = Convert.ToBoolean(objA, CultureInfo.InvariantCulture);
                bool flag1 = Convert.ToBoolean(objB, CultureInfo.InvariantCulture);
                return(flag.CompareTo(flag1));
            }

            case JTokenType.Null:
            case JTokenType.Undefined:
            {
                throw MiscellaneousUtils.CreateArgumentOutOfRangeException("valueType", valueType, "Unexpected value type: {0}".FormatWith(CultureInfo.InvariantCulture, valueType));
            }

            case JTokenType.Date:
            {
                if (!(objA is DateTime))
                {
                    DateTimeOffset dateTimeOffset1 = (DateTimeOffset)objA;
                    dateTimeOffset = (!(objB is DateTimeOffset) ? new DateTimeOffset(Convert.ToDateTime(objB, CultureInfo.InvariantCulture)) : (DateTimeOffset)objB);
                    return(dateTimeOffset1.CompareTo(dateTimeOffset));
                }
                DateTime dateTime1 = (DateTime)objA;
                dateTime = (!(objB is DateTimeOffset) ? Convert.ToDateTime(objB, CultureInfo.InvariantCulture) : ((DateTimeOffset)objB).DateTime);
                return(dateTime1.CompareTo(dateTime));
            }

            case JTokenType.Bytes:
            {
                if (!(objB is byte[]))
                {
                    throw new ArgumentException("Object must be of type byte[].");
                }
                byte[] numArray  = objA as byte[];
                byte[] numArray1 = objB as byte[];
                if (numArray == null)
                {
                    return(-1);
                }
                if (numArray1 == null)
                {
                    return(1);
                }
                return(MiscellaneousUtils.ByteArrayCompare(numArray, numArray1));
            }

            case JTokenType.Guid:
            {
                if (!(objB is Guid))
                {
                    throw new ArgumentException("Object must be of type Guid.");
                }
                return(((Guid)objA).CompareTo((Guid)objB));
            }

            case JTokenType.Uri:
            {
                if (!(objB is Uri))
                {
                    throw new ArgumentException("Object must be of type Uri.");
                }
                Uri uri  = (Uri)objA;
                Uri uri1 = (Uri)objB;
                return(Comparer <string> .Default.Compare(uri.ToString(), uri1.ToString()));
            }

            case JTokenType.TimeSpan:
            {
                if (!(objB is TimeSpan))
                {
                    throw new ArgumentException("Object must be of type TimeSpan.");
                }
                return(((TimeSpan)objA).CompareTo((TimeSpan)objB));
            }

            default:
            {
                throw MiscellaneousUtils.CreateArgumentOutOfRangeException("valueType", valueType, "Unexpected value type: {0}".FormatWith(CultureInfo.InvariantCulture, valueType));
            }
            }
        }