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