[英]Whats the difference between these two comparison statements?
这两个比较法的差异是什么?
var result = EqualityComparer<T>.Default.Equals(@this, null);
var result = @this == null;
显然,目的是测试对象'@this'是否为空。
那取决于@this
的类型。 如果它没有==
的重载,第二行将只执行直接引用比较,而第一行将调用重写的 Equals
方法或IEquatable.Equals
的实现。
任何明智的实施都会给两个比较带来相同的结果。
第一个语句调用对象之间的Equals()方法,以查看它们的值是否相等,假设它已被覆盖并在类T
。 第二个语句比较引用,除非在String
类中重写了==
运算符。
operator ==
在比较对象时调用ReferenceEquals
,因此请比较这些对象指向相同的内存位置。
Equals
,取而代之的,是一个公正的虚方法,这样可以表现不同的不同的类型,因为它可以被覆盖。
例如,对于CLR string
的Equals比较一个的内容 string
,而不是一个参考 ,即使string
是引用类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.