根据==
中MSDN运算符的文档,
对于字符串以外的引用类型,如果==如果它的两个操作数引用相同的对象,则返回true。
但是,老实说,我从不检查两个引用是否与==
相同。我更喜欢使用ReferenceEquals(obj1, obj2)
,因此也可以使用Equals
函数的默认覆盖。
因此,在我的项目中,当==运算符用于除字符串以外的其他类型时,等于一个错误。
当对引用(字符串除外)使用==时,是否可以通过Visual Studio或ReSharper触发警告/错误?
这不是全局解决方案,但是如果我们只考虑某些类,则CannotApplyEqualityOperatorAttribute
中的JetBrains.Annotations
可以解决问题。
[CannotApplyEqualityOperator]
public sealed class NonEquatable { }
public sealed class OtherClass
{
public bool DoForbiddenStuff()
{
var obj1 = new NonEquatable();
var obj2 = new NonEquatable();
// ERROR! 'Cannot apply equality operator to type marked by CannotApplyEqualityOperatorAttribute'
return obj1 == obj2;
}
}
仍在等待,看看是否有更通用的替代方法。