CA2013:請勿使用具有值類型的 ReferenceEquals

屬性
規則識別碼 CA2013
職稱 請勿在處理值類型時使用 ReferenceEquals
類別 可靠性
修正是造成中斷還是不中斷 不中斷
在 .NET 10 中預設啟用 作為警告
適用語言 C# 與 Visual Basic

原因

使用 System.Object.ReferenceEquals 方法來測試一或多個實值型別是否相等。

規則描述

使用 ReferenceEquals 比較值時,如果 objA 和 objB 是實值型別,則會在傳遞給 ReferenceEquals 方法之前進行 Box 處理。 這表示即使 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

隱藏警告的時機

抑制由此規則產生的警告是不安全的。 我們建議使用更適當的等號比較運算元,例如 ==

另請參閱