public int GetHashCode(object obj) { if (object.ReferenceEquals(obj, null)) { return(0); } if (obj is string) { string text = (string)obj; if ((CompareOptions.IgnoreCase & this.m_compareOptions) != 0) { text = text.ToUpper(this.m_cultureInfo); } return(text.GetHashCode()); } ICustomComparable customComparable = obj as ICustomComparable; if (customComparable != null) { return(customComparable.GetHashCode(this)); } return(obj.GetHashCode()); }
private int InternalCompareTo(object x, object y, bool throwExceptionOnComparisonFailure) { string text = x as string; string text2 = y as string; if (text != null && text2 != null) { return(this.m_compareInfo.Compare(text, text2, this.m_compareOptions)); } DataTypeCode dataTypeCode = ObjectSerializer.GetDataTypeCode(x); DataTypeCode dataTypeCode2 = ObjectSerializer.GetDataTypeCode(y); if (dataTypeCode == DataTypeCode.Empty && dataTypeCode2 == DataTypeCode.Empty) { return(0); } if (dataTypeCode == DataTypeCode.Empty) { if (this.m_nullsAsBlanks && ComparerUtility.IsNumericLessThanZero(y)) { return(1); } return(-1); } if (dataTypeCode2 == DataTypeCode.Empty) { if (this.m_nullsAsBlanks && ComparerUtility.IsNumericLessThanZero(x)) { return(-1); } return(1); } if (dataTypeCode != dataTypeCode2) { switch (ComparerUtility.GetCommonVariantConversionType(dataTypeCode, dataTypeCode2)) { case DataTypeCode.Double: { double num3 = 0.0; double num4 = 0.0; if (dataTypeCode == DataTypeCode.DateTime) { num3 = ((DateTime)x).ToOADate(); num4 = Convert.ToDouble(y, this.m_cultureInfo); } else if (dataTypeCode2 == DataTypeCode.DateTime) { num4 = ((DateTime)y).ToOADate(); num3 = Convert.ToDouble(x, this.m_cultureInfo); } else { num3 = Convert.ToDouble(x, this.m_cultureInfo); num4 = Convert.ToDouble(y, this.m_cultureInfo); } int num5 = num3.CompareTo(num4); if (num5 == 0) { return(CommonDataComparer.CompareNumericDateVariantTypes(dataTypeCode, dataTypeCode2, throwExceptionOnComparisonFailure)); } return(num5); } case DataTypeCode.Decimal: { decimal num = Convert.ToDecimal(x, this.m_cultureInfo); decimal value = Convert.ToDecimal(y, this.m_cultureInfo); int num2 = num.CompareTo(value); if (num2 == 0) { return(CommonDataComparer.CompareNumericDateVariantTypes(dataTypeCode, dataTypeCode2, throwExceptionOnComparisonFailure)); } return(num2); } case DataTypeCode.Int64: { long num6 = Convert.ToInt64(x, this.m_cultureInfo); long value2 = Convert.ToInt64(y, this.m_cultureInfo); int num7 = num6.CompareTo(value2); if (num7 == 0) { return(CommonDataComparer.CompareNumericDateVariantTypes(dataTypeCode, dataTypeCode2, throwExceptionOnComparisonFailure)); } return(num7); } case DataTypeCode.Unknown: if (!ComparerUtility.IsNonNumericVariant(dataTypeCode) && !ComparerUtility.IsNonNumericVariant(dataTypeCode2)) { break; } return(CommonDataComparer.CompareToNonNumericVariantTypes(dataTypeCode, dataTypeCode2, x, y, throwExceptionOnComparisonFailure)); } } ICustomComparable customComparable = x as ICustomComparable; ICustomComparable customComparable2 = y as ICustomComparable; if (customComparable != null && customComparable2 != null) { return(customComparable.CompareTo(customComparable2, this)); } IComparable left = (IComparable)x; IComparable right = (IComparable)y; return(this.Compare(left, right, throwExceptionOnComparisonFailure)); }