コードインスペクション:「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] 属性は 自作の型にも利用でき、また 外部アノテーション の仕組みを利用して、使用する他のコンパイル済みライブラリの型にもアノテートできます。
2026 年 6 月 12 日