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
隱藏警告的時機
隱藏此規則的警告並不安全。 我們建議使用更適當的等號比較運算子,例如 ==
。