这两种比较说法有什么不同

  • 本文关键字:两种 比较 c# .net
  • 更新时间 :
  • 英文 :


这两个比较状态之间有什么区别?

var result = EqualityComparer<T>.Default.Equals(@this, null);
var result = @this == null;

显然,目的是测试对象"@this"是否为空。

这取决于@this的类型。如果它没有==的重载,第二行将只执行直接引用比较,而第一行将调用重写的Equals方法或IEquatable.Equals的实现。

任何合理的实现都将为两种比较提供相同的结果。

第一条语句在对象之间调用Equals()方法,以查看它们的值是否相等,假设它已被覆盖并在类T中实现。第二条语句会比较引用,除非==运算符像String类中那样被重写。

运算符==在比较对象时调用ReferenceEquals,因此比较对象是否指向相同的内存位置。

相反,Equals只是一个虚拟方法,因此可以对不同类型的有不同的行为,因为它可以被覆盖。

例如,对于CLR string,Equals比较string内容而不是引用,即使string是引用类型。

最新更新