Bagikan melalui


CA2242: Uji NaN dengan benar

Properti Nilai
ID Aturan CA2242
Judul Uji NaN dengan benar
Golongan Penggunaan
Perbaikan bersifat disruptif atau non-disruptif Non-disruptif
Diaktifkan secara default di .NET 8 Sebagai saran

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 Main()
    {
        Console.WriteLine(0 / zero == double.NaN);
        Console.WriteLine(0 / zero != double.NaN);
        Console.WriteLine(double.IsNaN(0 / zero));
    }
}