代码检查:标记为 '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日