Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| Ö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.