equal 与 ==

            var s1 = new { Name = "abc" };
            var s2 = new { Name = "abc" };

            Debug.WriteLine(s1.Equals(s2));
            Debug.WriteLine(s1 == s2);

            var s3 = s2;
            Debug.WriteLine(s2.Equals(s3));
            Debug.WriteLine(s2 == s3);
 .entrypoint
  // 代码大小       92 (0x5c)
  .maxstack  2
  .locals init ([0] class '<>f__AnonymousType0`1'<string> s1,
           [1] class '<>f__AnonymousType0`1'<string> s2,
           [2] class '<>f__AnonymousType0`1'<string> s3)
  IL_0000:  nop
  IL_0001:  ldstr      "abc"
  IL_0006:  newobj     instance void class '<>f__AnonymousType0`1'<string>::.ctor(!0)
  IL_000b:  stloc.0
  IL_000c:  ldstr      "abc"
  IL_0011:  newobj     instance void class '<>f__AnonymousType0`1'<string>::.ctor(!0)
  IL_0016:  stloc.1
  IL_0017:  ldloc.0
  IL_0018:  ldloc.1
  IL_0019:  callvirt   instance bool [mscorlib]System.Object::Equals(object)
  IL_001e:  box        [mscorlib]System.Boolean
  IL_0023:  call       void [System]System.Diagnostics.Debug::WriteLine(object)
  IL_0028:  nop
  IL_0029:  ldloc.0
  IL_002a:  ldloc.1
  IL_002b:  ceq
  IL_002d:  box        [mscorlib]System.Boolean
  IL_0032:  call       void [System]System.Diagnostics.Debug::WriteLine(object)
  IL_0037:  nop
  IL_0038:  ldloc.1
  IL_0039:  stloc.2
  IL_003a:  ldloc.1
  IL_003b:  ldloc.2
  IL_003c:  callvirt   instance bool [mscorlib]System.Object::Equals(object)
  IL_0041:  box        [mscorlib]System.Boolean
  IL_0046:  call       void [System]System.Diagnostics.Debug::WriteLine(object)
  IL_004b:  nop
  IL_004c:  ldloc.1
  IL_004d:  ldloc.2
  IL_004e:  ceq
  IL_0050:  box        [mscorlib]System.Boolean
  IL_0055:  call       void [System]System.Diagnostics.Debug::WriteLine(object)
  IL_005a:  nop
  IL_005b:  ret
结果是……
posted @ 2011-04-01 21:53  life++  阅读(240)  评论(0编辑  收藏  举报