代码检查:标记为 'CannotApplyEqualityOperatorAttribute' 的类型的值应使用 'Equals()' 进行比较
JetBrains Rider 在 ReSharper.Annotations中提供了 [CannotApplyEqualityOperator]属性,用于标记不适合使用 == 和 != 运算符的类型,并应替换为 Equals()。 因此,当两个标记有此属性的类型使用 == 或 != 进行比较时,JetBrains Rider 将发出警告。
JetBrains Rider 假定使用相等运算符与 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);
}
}
您可能还会想知道 JetBrains Rider 是如何知道哪些库类型不能使用相等运算符进行比较的。 实际上,这一技巧是通过 外部注解 为 .NET Framework 类库和其他常用库实现的。 这些注解包含在 JetBrains Rider 的安装中。 触发此检查的 [无法对类型应用相等运算符] 属性也可以 用于您的自定义类型 ,或者您可以使用 外部注解 的机制为您使用的其他已编译库中的类型添加注解。
最后修改日期: 2025年 9月 26日