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
Düzeltme bozucu ya da bozmayan olabilir Kesintisiz
.NET 10'da varsayılan olarak etkin Uyarı olarak
Geçerli diller C# ve Visual Basic

Neden

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

Kural açıklaması

kullanarak ReferenceEquals değerleri karşılaştırırken, objA ve objB değer türleriyse, ReferenceEquals yöntemine geçirilmeden önce box'lanı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, == 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.