即使在運行時解析到的Int32類型,IL表明它叫的Object.Equals代替int32.Equals,像這樣的例子:IL代碼生成的Object.Equals
object x = 5;
object y = 5;
Console.WriteLine(x.Equals(y));
但它返回true,這意味着它執行了價值平等。我想我的問題是不應該IL本來應該instance bool [mscorlib]System.Int32::Equals(int32)
// [18 13 - 18 27]
IL_0001: ldc.i4.5
IL_0002: box [mscorlib]System.Int32
IL_0007: stloc.0 // x
// [19 13 - 19 27]
IL_0008: ldc.i4.5
IL_0009: box [mscorlib]System.Int32
IL_000e: stloc.1 // y
// [21 13 - 21 46]
IL_000f: ldloc.0 // x
IL_0010: ldloc.1 // y
IL_0011: callvirt instance bool [mscorlib]System.Object::Equals(object)
IL_0016: call void [mscorlib]System.Console::WriteLine(bool)
IL_001b: nop
「解析爲Int32 _at runtime_」的類型 - 這是關鍵點。 –