Freigeben über


CA2013: Verwenden Sie ReferenceEquals nicht mit Werttypen.

Eigenschaft Wert
Regel-ID CA2013
Titel Verwenden Sie ReferenceEquals nicht mit Werttypen.
Kategorie Zuverlässigkeit
Fix führt zu Unterbrechungen oder bleibt funktionsfähig Untrennbar
Standardmäßig in .NET 10 aktiviert Als Warnung
Anwendbare Sprachen C# und Visual Basic

Ursache

Verwenden der System.Object.ReferenceEquals-Methode, um einen oder mehrere Werttypen auf Gleichheit zu testen.

Regelbeschreibung

Wenn Werte mithilfe von ReferenceEquals verglichen werden und objA und objB Werttypen sind, werden sie geboxt, bevor sie an die ReferenceEquals-Methode übergeben werden. Dies bedeutet, dass die ReferenceEquals-Methode selbst dann „false“ zurückgibt, wenn objA und objB dieselbe Instanz eines Werttyps darstellen, wie das folgende Beispiel zeigt.

So beheben Sie Verstöße

Um den Verstoß zu beheben, ersetzen Sie ihn durch eine geeignetere Gleichheitsüberprüfung, z. B. ==.


    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

Wann sollten Warnungen unterdrückt werden?

Es ist nicht sicher, eine Warnung, die auf dieser Regel basiert, zu unterdrücken. Es wird empfohlen, den geeigneteren Gleichheitsoperator zu verwenden, z. B. ==.

Siehe auch