ReSharper 2025.2 Help

代码检查:标记为 'CannotApplyEqualityOperatorAttribute' 的类型值应使用 'Equals()' 进行比较

ReSharper 在 ReSharper.Annotations中提供了 [CannotApplyEqualityOperator]属性,用于标记不适合使用 ==!= 运算符的类型,并应替换为 Equals()。 因此,当两个标记有此属性的类型使用 ==!= 进行比较时,ReSharper 将发出警告。

ReSharper 假定使用相等运算符与 null 进行比较是显而易见的,在这种情况下不会发出警告。

[CannotApplyEqualityOperator] class NoEqualityOperators { } class TestEquality { bool Test() { var ne1 = new NoEqualityOperators(); var ne2 = new NoEqualityOperators(); return ne1 == ne2; // warning } }
[CannotApplyEqualityOperator] class NoEqualityOperators { } class TestEquality { bool Test() { var ne1 = new NoEqualityOperators(); var ne2 = new NoEqualityOperators(); return Equals(ne1, ne2); } }

您可能还想知道 ReSharper 是如何知道哪些库类型不能使用相等运算符进行比较的。 嗯,这个技巧是通过 外部注解 为 .NET Framework 类库和其他常用库实现的。 这些注解包含在 ReSharper 的安装中。 触发此检查的 [CannotApplyEqualityOperator] 属性也可以 用于您的自定义类型 ,或者您可以使用 外部注解 的机制为您使用的其他已编译库中的类型添加注解。

最后修改日期: 2025年 9月 27日