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.