CA2242: NaN için doğru şekilde test edin

Özellik Değer
Kural Kimliği CA2242
Başlık NaN'ı doğru şekilde test et
Kategori Kullanım
Düzeltme bozucu ya da bozmayan olabilir Kesintisiz
.NET 10'da varsayılan olarak etkin Öneri olarak
Geçerli diller C# ve Visual Basic

Neden

İfade, bir değeri System.Single.NaN veya System.Double.NaN ile test eder.

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. Değer ile System.Double.NaN arasında eşitliği test eden herhangi bir ifade her zaman false döndürür. C# dilinde bir değer ile System.Double.NaN arasında eşitsizlik olup olmadığını test eden herhangi bir ifade her zaman true döndürür.

İhlalleri düzeltme

Bu kuralın ihlalini düzeltmek ve bir değerin System.Double.NaN temsil edip etmediğini doğru bir şekilde belirlemek için, değeri test etmek üzere System.Single.IsNaN veya System.Double.IsNaN kullanın.

Uyarıların ne zaman bastırılması gerekiyor?

Bu kuraldan uyarıyı bastırmayın.

Örnek

Aşağıdaki örnek, bir değeri System.Double.NaN değerine karşı yanlış test eden iki ifadeyi ve değeri test etmek için System.Double.IsNaN öğesini doğru şekilde kullanan 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));
    }
}