typeof(int) == typeof(int)
此表达式如何评估??
当我使用
时Console.WriteLine(typeof(int));
使用System.Int32
对象方法输出ToString()
。所以我假设在这个表达式中
typeof(int) == typeof(int)
ToString()
将两者都转换为System.Int32
,然后比较它们的字符串。这是真的吗?
或其他事情发生
答案 0 :(得分:3)
没有。与其他类通常一样,它使用相等比较器(==
)System.Type
覆盖,并在两个实例之一上使用Equals
方法检查它们的相等性。
typeof(int)
会返回Type
,因此会调用Type.Equals
。您可以看到来源here。
您将看到它最终使用它来比较两个实例:
return (Object.ReferenceEquals(this.UnderlyingSystemType, o.UnderlyingSystemType));
答案 1 :(得分:2)
typeof()
运算符解析为System.Type
,==
上的System.Type
运算符检查引用相等性。这对于System.Type
来说已经足够了,因为这个保证:
表示类型的Type对象是唯一的;也就是说,当且仅当它们表示相同类型时,两个Type对象引用引用同一对象。这允许使用引用相等性来比较Type对象。
http://msdn.microsoft.com/en-us/library/42892f65.aspx
所以答案是,==检查两种类型是否引用内存中完全相同的对象,如果原始对象属于同一类型,则它们的类型保证引用内存中的同一对象,因为以上引用。
答案 2 :(得分:1)
typeof(int) == typeof(int)
的IL代码是
IL_0000: ldtoken System.Int32
IL_0005: call System.Type.GetTypeFromHandle
IL_000A: ldtoken System.Int32
IL_000F: call System.Type.GetTypeFromHandle
IL_0014: call System.Type.op_Equality
您可以看到它调用静态相等运算符
public static bool operator ==(Type left, Type right)
我们无法看到此方法在reference source中的作用,因为它显然是一种外部方法,但我的猜测是调用Equals
方法或执行类似操作本机代码中的比较。
答案 3 :(得分:0)
Console.WriteLine(object);
打印string
的事实并不意味着Type
类型总是一个字符串,类似于您打印出来的方式没有通过int
方法查看和比较int
ToString
的{{1}}值。
==
运算符将测试类型的相等性,并且绝不会触及ToString()
。
我认为你有点困惑 - 如果我不得不猜测 - 在打印内容和将其保存在内存之间的区别。