[英]How == operator works with System.Type
typeof(int) == typeof(int)
此表达式如何计算?
当我使用
Console.WriteLine(typeof(int));
它使用对象的ToString()
方法输出System.Int32
。 所以我假设在这个表达式中
typeof(int) == typeof(int)
ToString()
将其都转换为System.Int32
,然后将其字符串进行比较。 真的吗 ??
或其他事情正在发生
否。像其他所有类通常一样,它使用相等比较器( ==
) System.Type
被覆盖,并且对两个实例之一检查Equals
方法是否相等。
typeof(int)
返回Type
,因此调用Type.Equals
。 您可以在此处查看源代码。
您将看到它最终使用它来比较两个实例:
return (Object.ReferenceEquals(this.UnderlyingSystemType, o.UnderlyingSystemType));
所述typeof()
算子解析为一个System.Type
,并且==
上操作者System.Type
检查引用相等 。 这对于System.Type
就足够了,因为有以下保证:
表示类型的Type对象是唯一的; 也就是说,两个Type对象引用在且仅当它们表示相同类型时才引用同一对象。 这允许使用引用相等性比较Type对象。
http://msdn.microsoft.com/en-us/library/42892f65.aspx
所以答案是,==检查两种类型是否都指向内存中完全相同的对象,并且如果原始对象属于同一类型,则由于上面的引用,可以保证它们的类型都指向内存中的相同对象。 。
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)
我们无法在参考源中看到此方法的作用,因为它显然是外部方法,但我猜是它要么调用Equals
方法,要么在本机代码中执行类似的比较。
Console.WriteLine(object);
的事实Console.WriteLine(object);
打印出一个string
并不意味着Type
类型总是一个字符串,类似于您可以打印出一个int
值而无需通过其ToString
方法查看和比较该int
方式。
==
运算符将测试类型的相等性,并且绝不涉及ToString()
。
我想您可能有点困惑-如果我不得不猜测-在打印某些内容和将其保存在内存之间的区别。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.