繁体   English   中英

这两个比较陈述之间有什么区别?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM