CA2242: Uji NaN dengan benar

Properti Nilai
ID Aturan CA2242
Judul Uji NaN dengan benar
Kategori Penggunaan
Perbaikan bersifat merusak atau tidak merusak Tidak terputus
Diaktifkan secara default di .NET 10 Sebagai saran
Bahasa yang berlaku C# dan Visual Basic

Penyebab

Ekspresi menguji nilai terhadap System.Single.NaN atau System.Double.NaN.

Deskripsi aturan

System.Double.NaN, yang mewakili nilai yang bukan angka, dihasilkan saat operasi aritmetika tidak ditentukan. Ekspresi apa pun yang menguji kesetaraan antara nilai dan System.Double.NaN selalu mengembalikan false. Ekspresi apa pun yang menguji ketidaksetaraan (!= dalam C#) antara nilai dan System.Double.NaN selalu mengembalikan true.

Cara memperbaiki pelanggaran

Untuk memperbaiki pelanggaran aturan ini dan secara akurat menentukan apakah nilai mewakili System.Double.NaN, gunakan System.Single.IsNaN atau System.Double.IsNaN untuk menguji nilai.

Kapan harus menekan peringatan

Jangan menyembunyikan peringatan dari aturan ini.

Contoh

Contoh berikut menunjukkan dua ekspresi yang menguji nilai terhadap System.Double.NaN dengan salah dan ekspresi yang menggunakan System.Double.IsNaN dengan benar untuk menguji nilai.

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));
    }
}