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