这两个比较语句有什么区别?
显然,目的是测试对象“@this”是否为空。
var result = EqualityComparer<T>.Default.Equals(@this, null);
var result = @this == null;
显然,目的是测试对象“@this”是否为空。
这取决于@this
的类型。如果它没有==
的重载,那么第二行将只执行直接引用比较,而第一行将调用重写的Equals
方法或IEquatable.Equals
的实现。
任何明智的实现都会为两个比较提供相同的结果。
操作符==
在比较对象时调用ReferenceEquals
,因此比较对象是否指向相同的内存位置。
Equals
是一个虚方法,因此对于不同类型,可以表现出不同的行为,因为它可以被重写。
例如,对于CLR string
,Equals
比较string
的内容而不是引用,即使string
是引用类型。
==
可能 调用 ReferenceEquals
。这取决于 @this
的类型。它可能被覆盖。 - Servy