CA2242: NaN에 대해 정확하게 테스트하십시오.

속성
규칙 ID CA2242
타이틀 NaN에 대해 정확하게 테스트하십시오.
범주 사용 현황
수정 사항이 주요 변경인지 여부 주요 변경 아님
.NET 8에서 기본적으로 사용 제안 사항

원인

이 식은 System.Single.NaN 또는 System.Double.NaN에 대한 값을 테스트합니다.

규칙 설명

System.Double.NaN은 숫자가 아닌 값을 나타내며 산술 연산이 정의되지 않은 경우에 발생합니다. 값과 System.Double.NaN가 같은지 테스트하는 식은 항상 false를 반환합니다. 값과 System.Double.NaN가 같지 않은지(C#의 !=) 테스트하는 식은 항상 true를 반환합니다.

위반 문제를 해결하는 방법

이 규칙 위반을 해결하고 값이 System.Double.NaN을 나타내는지 정확하게 확인하려면 System.Single.IsNaN 또는 System.Double.IsNaN을 사용하여 값을 테스트합니다.

경고를 표시하지 않는 경우

이 규칙에서는 경고를 표시해야 합니다.

예시

다음 예에서는 System.Double.NaN에 대한 값을 잘못 테스트하는 두 식과 System.Double.IsNaN을 사용하여 값을 올바르게 테스트하는 식을 보여 줍니다.

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