CA2013: 値の型と共に ReferenceEquals を使用しないでください

プロパティ
ルール ID CA2013
Title 値の型と共に ReferenceEquals を使用しないでください
[カテゴリ] 信頼性
修正が中断ありか中断なしか なし
.NET 8 では既定で有効 警告として

原因

System.Object.ReferenceEquals メソッドを使用して 1 つまたは複数の値の型の等価性をテストしています。

規則の説明

ReferenceEquals を使用して値を比較するときに、objA と objB が値の型である場合、この 2 つは ReferenceEquals メソッドに渡される前にボックス化されます。 つまり、次の例で示すように、objA と objB が同じ値の型のインスタンスを表している場合でも、ReferenceEquals メソッドからは false が返されます。

違反の修正方法

違反を修正するには、== など、より適切な等価性チェックに置き換えます。


    int int1 = 1, int2 = 1;

    // Violation occurs, returns false.
    Console.WriteLine(Object.ReferenceEquals(int1, int2));  // false

    // Use appropriate equality operator or method instead
    Console.WriteLine(int1 == int2);                        // true
    Console.WriteLine(object.Equals(int1, int2));           // true

どのようなときに警告を抑制するか

この規則による警告は抑制できません。 == など、より適切な等値演算子を使用することをお勧めします。

関連項目