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 8'de varsayılan olarak etkin Öneri olarak

Neden

İfade, veya System.Double.NaNile System.Single.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 Main()
    {
        Console.WriteLine(0 / zero == double.NaN);
        Console.WriteLine(0 / zero != double.NaN);
        Console.WriteLine(double.IsNaN(0 / zero));
    }
}