CA2013:请勿将 ReferenceEquals 与值类型结合使用
属性 | 值 |
---|---|
规则 ID | CA2013 |
标题 | 请勿将 ReferenceEquals 与值类型结合使用 |
类别 | 可靠性 |
修复是中断修复还是非中断修复 | 非中断 |
在 .NET 9 中默认启用 | 作为警告 |
原因
使用 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
何时禁止显示警告
不可禁止显示此规则的警告。 我们建议使用更合适的相等运算符,例如 ==
。