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

屬性
規則識別碼 CA2013
標題 請勿使用具有值類型的 ReferenceEquals
類別 可靠性
修正程式是中斷或非中斷 不中斷
預設在 .NET 8 中啟用 作為警告

原因

使用 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

隱藏警告的時機

隱藏此規則的警告並不安全。 我們建議使用更適當的等號比較運算子,例如 ==

另請參閱