关于在引用(Visual Studio 或 ReSharper)上使用 == 的警告

Warning on == used on references (Visual Studio or ReSharper)

根据 == 运算符在 MSDN 中的文档,

For reference types other than string, == returns true if its two operands refer to the same object.

但是,老实说,我从不检查两个引用是否与 == 相同。
我更喜欢使用 ReferenceEquals(obj1, obj2) 并且 Equals 函数的默认覆盖也是如此。

因此,在我的项目中,当==操作符被用在string以外的其他类型上时,等于是一个bug。

当 == 用于引用(除了字符串)时,有没有办法通过 Visual Studio 或 ReSharper 触发 warning/error?

这不是全局解决方案,但如果我们只想考虑一些 类,JetBrains.Annotations 中的 CannotApplyEqualityOperatorAttribute 就可以了。

[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; 
    }
}

仍在等待查看是否有更通用的替代方案。

按照建议,我创建了一个扩展程序来执行此操作。

如果您有兴趣,这里是 link 到 extension 市场。
这是 link 到 source code

目前它不会检查对象是否有运算符“==”和“!=”的覆盖。非常欢迎任何想贡献的人。