System.CultureAwareComparer

using System.Globalization;
namespace System
{
[Serializable]
internal sealed class CultureAwareComparer:System.StringComparer
{
private System.Globalization.CompareInfo _compareInfo;
private bool _ignoreCase;
internal CultureAwareComparer(System.Globalization.CultureInfo culture,bool ignoreCase):base()
{
//.maxstack  8
//IL_0000:  ldarg.0
//IL_0001:  call       instance void System.StringComparer::.ctor()
//IL_0006:  ldarg.0
//IL_0007:  ldarg.1
//IL_0008:  callvirt   instance class System.Globalization.CompareInfo System.Globalization.CultureInfo::get_CompareInfo()
//IL_000d:  stfld      class System.Globalization.CompareInfo System.CultureAwareComparer::_compareInfo
//IL_0012:  ldarg.0
//IL_0013:  ldarg.2
//IL_0014:  stfld      bool System.CultureAwareComparer::_ignoreCase
//IL_0019:  ret
            this._compareInfo = culture.CompareInfo;
            this._ignoreCase = ignoreCase;
}
public override int Compare(string x,string y)
{
//.maxstack  8
//IL_0000:  ldarg.1
//IL_0001:  ldarg.2
//IL_0002:  call       bool System.Object::ReferenceEquals(object,
//object)
//IL_0007:  brfalse.s  IL_000b
//IL_0009:  ldc.i4.0
//IL_000a:  ret
//IL_000b:  ldarg.1
//IL_000c:  brtrue.s   IL_0010
//IL_000e:  ldc.i4.m1
//IL_000f:  ret
//IL_0010:  ldarg.2
//IL_0011:  brtrue.s   IL_0015
//IL_0013:  ldc.i4.1
//IL_0014:  ret
//IL_0015:  ldarg.0
//IL_0016:  ldfld      class System.Globalization.CompareInfo System.CultureAwareComparer::_compareInfo
//IL_001b:  ldarg.1
//IL_001c:  ldarg.2
//IL_001d:  ldarg.0
//IL_001e:  ldfld      bool System.CultureAwareComparer::_ignoreCase
//IL_0023:  brtrue.s   IL_0028
//IL_0025:  ldc.i4.0
//IL_0026:  br.s       IL_0029
//IL_0028:  ldc.i4.1
//IL_0029:  callvirt   instance int32 System.Globalization.CompareInfo::Compare(string,
//string,
//valuetype System.Globalization.CompareOptions)
//IL_002e:  ret
            if (object.ReferenceEquals(x, y))
            {
                return 0;
            }
            else if (x == null)
            {
                return -1;
            }
            else if (y == null)
            {
                return 1;
            }
            else
            {
                if (this._ignoreCase)
                {
                    return this._compareInfo.Compare(x, y, CompareOptions.IgnoreCase);
                }
                else
                {
                    return this._compareInfo.Compare(x, y, CompareOptions.None);
                }
            }

}
public override bool Equals(string x,string y)
{
//.maxstack  8
//IL_0000:  ldarg.1
//IL_0001:  ldarg.2
//IL_0002:  call       bool System.Object::ReferenceEquals(object,
//object)
//IL_0007:  brfalse.s  IL_000b
//IL_0009:  ldc.i4.1
//IL_000a:  ret
//IL_000b:  ldarg.1
//IL_000c:  brfalse.s  IL_0011
//IL_000e:  ldarg.2
//IL_000f:  brtrue.s   IL_0013
//IL_0011:  ldc.i4.0
//IL_0012:  ret
//IL_0013:  ldarg.0
//IL_0014:  ldfld      class System.Globalization.CompareInfo System.CultureAwareComparer::_compareInfo
//IL_0019:  ldarg.1
//IL_001a:  ldarg.2
//IL_001b:  ldarg.0
//IL_001c:  ldfld      bool System.CultureAwareComparer::_ignoreCase
//IL_0021:  brtrue.s   IL_0026
//IL_0023:  ldc.i4.0
//IL_0024:  br.s       IL_0027
//IL_0026:  ldc.i4.1
//IL_0027:  callvirt   instance int32 System.Globalization.CompareInfo::Compare(string,
//string,
//valuetype System.Globalization.CompareOptions)
//IL_002c:  ldc.i4.0
//IL_002d:  ceq
//IL_002f:  ret
            if (object.ReferenceEquals(x, y))
            {
                return true;
            }
            else if (x == null)
            {
                return false;
            }
            else if (y == null)
            {
                return false;
            }
            else
            {
                if (this._ignoreCase)
                {
                    return this._compareInfo.Compare(x, y, CompareOptions.IgnoreCase) == 0;
                }
                else
                {
                    return this._compareInfo.Compare(x, y, CompareOptions.None) == 0;
                }
            }

}
public override int GetHashCode(string obj)
{
//.maxstack  8
//IL_0000:  ldarg.1
//IL_0001:  brtrue.s   IL_000e
//IL_0003:  ldstr      "obj"
//IL_0008:  newobj     instance void System.ArgumentNullException::.ctor(string)
//IL_000d:  throw
//IL_000e:  ldarg.0
//IL_000f:  ldfld      bool System.CultureAwareComparer::_ignoreCase
//IL_0014:  brfalse.s  IL_0024
//IL_0016:  ldarg.0
//IL_0017:  ldfld      class System.Globalization.CompareInfo System.CultureAwareComparer::_compareInfo
//IL_001c:  ldarg.1
//IL_001d:  ldc.i4.1
//IL_001e:  callvirt   instance int32 System.Globalization.CompareInfo::GetHashCodeOfString(string,
//valuetype System.Globalization.CompareOptions)
//IL_0023:  ret
//IL_0024:  ldarg.0
//IL_0025:  ldfld      class System.Globalization.CompareInfo System.CultureAwareComparer::_compareInfo
//IL_002a:  ldarg.1
//IL_002b:  ldc.i4.0
//IL_002c:  callvirt   instance int32 System.Globalization.CompareInfo::GetHashCodeOfString(string,
//valuetype System.Globalization.CompareOptions)
//IL_0031:  ret
            if (obj == null)
            {
                throw new System.ArgumentNullException("obj");
            }
            else
            {
                if (this._ignoreCase)
                {
                    return this._compareInfo.GetHashCodeOfString(obj, CompareOptions.IgnoreCase);
                }
                else
                {
                    return this._compareInfo.GetHashCodeOfString(obj, CompareOptions.None);
                }
            }
}
public override bool Equals(object obj)
{
//.maxstack  2
//.locals init (class System.CultureAwareComparer V_0)
//IL_0000:  ldarg.1
//IL_0001:  isinst     System.CultureAwareComparer
//IL_0006:  stloc.0
//IL_0007:  ldloc.0
//IL_0008:  brtrue.s   IL_000c
//IL_000a:  ldc.i4.0
//IL_000b:  ret
//IL_000c:  ldarg.0
//IL_000d:  ldfld      bool System.CultureAwareComparer::_ignoreCase
//IL_0012:  ldloc.0
//IL_0013:  ldfld      bool System.CultureAwareComparer::_ignoreCase
//IL_0018:  bne.un.s   IL_002c
//IL_001a:  ldarg.0
//IL_001b:  ldfld      class System.Globalization.CompareInfo System.CultureAwareComparer::_compareInfo
//IL_0020:  ldloc.0
//IL_0021:  ldfld      class System.Globalization.CompareInfo System.CultureAwareComparer::_compareInfo
//IL_0026:  callvirt   instance bool System.Object::Equals(object)
//IL_002b:  ret
//IL_002c:  ldc.i4.0
//IL_002d:  ret
            CultureAwareComparer V_0;
            V_0 = (obj as CultureAwareComparer);
            if (V_0 == null)
            {
                return false;
            }
            else
            {
                if (this._ignoreCase != V_0._ignoreCase)
                {
                    return false;
                }
                else
                {
                    return this._compareInfo.Equals(V_0.compareInfo);
                }
            }
}
public override int GetHashCode()
{
//.maxstack  2
//.locals init (int32 V_0)
//IL_0000:  ldarg.0
//IL_0001:  ldfld      class System.Globalization.CompareInfo System.CultureAwareComparer::_compareInfo
//IL_0006:  callvirt   instance int32 System.Object::GetHashCode()
//IL_000b:  stloc.0
//IL_000c:  ldarg.0
//IL_000d:  ldfld      bool System.CultureAwareComparer::_ignoreCase
//IL_0012:  brtrue.s   IL_0016
//IL_0014:  ldloc.0
//IL_0015:  ret
//IL_0016:  ldloc.0
//IL_0017:  not
//IL_0018:  ret
            int V_0;
            V_0=this._compareInfo.GetHashCode();
            if (this._ignoreCase)
            {
                return V_0;
            }
            else
            {
                return ~V_0;
            }
}
}
}

posted @ 2010-08-28 21:11  Aegis  阅读(236)  评论(0编辑  收藏  举报