CA2013: ReferenceEquals'i değer türleriyle kullanmayın

Özellik Değer
Kural Kimliği CA2013
Başlık ReferenceEquals metodunu değer türleriyle birlikte kullanmayın
Kategori Güvenilirlik
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 8'de varsayılan olarak etkin Uyarı olarak

Neden

Eşitlik için bir veya daha fazla değer türünü test etmek için yöntemini kullanma System.Object.ReferenceEquals .

Kural açıklaması

kullanarak ReferenceEqualsdeğerleri karşılaştırırken, objA ve objB değer türleriyse, yöntemine ReferenceEquals geçirilmeden önce kutulanırlar. Bu, hem objA hem de objB bir değer türünün aynı örneğini temsil ediyor olsa bile aşağıdaki ReferenceEquals örnekte gösterildiği gibi yöntemin yine de false döndürdüğü anlamına gelir.

İhlalleri düzeltme

İhlali düzeltmek için değerini gibi ==daha uygun bir eşitlik denetimiyle değiştirin.


    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

Uyarıların ne zaman bastırılması gerekiyor?

Bu kuraldan gelen bir uyarıyı engellemek güvenli değildir. gibi ==daha uygun eşitlik işlecini kullanmanızı öneririz.

Ayrıca bkz.