CA2013:请勿将 ReferenceEquals 与值类型结合使用

属性
规则 ID CA2013
标题 请勿将 ReferenceEquals 与值类型结合使用
类别 可靠性
修复是中断修复还是非中断修复 非中断
在 .NET 8 中默认启用 作为警告

原因

使用 System.Object.ReferenceEquals 方法来测试一个或多个值类型是否相等。

规则说明

使用 ReferenceEquals 比较值时,如果 objA 和 objB 是值类型,则会先对其进行装箱然后才会将其传递给 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

何时禁止显示警告

不可禁止显示此规则的警告。 我们建议使用更合适的相等运算符,例如 ==

另请参阅