CA2242: NaN için doğru sınayın
Özellik | Değer |
---|---|
Kural Kimliği | CA2242 |
Başlık | NaN için doğru test edin |
Kategori | Kullanım |
Hataya neden olan veya bozulmayan düzeltme | Hataya neden olmayan |
.NET 9'da varsayılan olarak etkin | Öneri olarak |
Neden
İfade, veya System.Single.NaNile System.Double.NaN bir değeri test ediyor.
Kural açıklaması
System.Double.NaN, sayı olmayan bir değeri temsil eder ve aritmetik işlem tanımsız olduğunda sonuçlanır. Bir değer arasındaki eşitliği test eden ve System.Double.NaN her zaman döndüren tüm ifadeler false
. Bir değer arasında eşitsizlik (!=
C# dilinde) olup olmadığını test eden tüm System.Double.NaN ifadeler her zaman döndürür true
.
İhlalleri düzeltme
Bu kuralın ihlalini düzeltmek ve bir değerin değerini temsil System.Double.NaNSystem.Single.IsNaN edip etmediğini doğru bir şekilde belirlemek için veya System.Double.IsNaN kullanarak değeri test edin.
Uyarıların ne zaman bastırılması gerekiyor?
Bu kuraldan uyarıyı bastırmayın.
Örnek
Aşağıdaki örnek, bir değeri yanlış test eden iki ifadeyi ve değeri System.Double.NaN test etmek için doğru şekilde kullanan System.Double.IsNaN bir ifadeyi gösterir.
Imports System
Namespace ca2242
Class NaNTests
Shared zero As Double
Shared Sub Main2242()
Console.WriteLine(0 / zero = Double.NaN)
Console.WriteLine(0 / zero <> Double.NaN)
Console.WriteLine(Double.IsNaN(0 / zero))
End Sub
End Class
End Namespace
class NaNTests
{
static double zero = 0;
static void RunIt()
{
Console.WriteLine(0 / zero == double.NaN);
Console.WriteLine(0 / zero != double.NaN);
Console.WriteLine(double.IsNaN(0 / zero));
}
}