[C#] 비교 연산자는 null int와 어떻게 작동합니까?

nullable 유형을 배우기 시작하고 다음과 같은 동작이 발생했습니다.

nullable int를 시도하는 동안 비교 연산자가 예기치 않은 결과를 얻습니다. 예를 들어, 아래 코드에서 내가 얻는 결과는 “둘 다 1이 같습니다” 입니다. “null”도 인쇄하지 않습니다.

int? a = null;
int? b = 1;

if (a < b)
    Console.WriteLine("{0} is bigger than {1}", b, a);
else if (a > b)
    Console.WriteLine("{0} is bigger than {1}", a, b);
else
    Console.WriteLine("both {0} and {1} are equal", a, b);

음수가 아닌 정수가 null보다 클 것으로 기대했습니다. 여기에 뭔가가 빠져 있습니까?



답변

MSDN 에 따르면 “운영자”섹션의 페이지가 아래에 있습니다.

당신이 nullable 형식과 비교를 수행 할 때 null 허용 유형 중 하나의 값이있는 경우, null다른이 아닌, 모든 비교하는 평가 false를 제외하고!=

그래서 모두 a > ba < b로 평가 false하기 때문에 anull의 …


답변

MSDN이 말한 것처럼

널 입력 가능 유형과의 비교를 수행 할 때 널 입력 가능 유형 중 하나의 값이 널이고 다른 값이 아닌 경우! = (같지 않음)을 제외하고 모든 비교는 false로 평가됩니다. 특정 비교가 false를 리턴하므로 반대의 경우는 true를 리턴한다고 가정하지 않아야합니다. 다음 예에서 10은 널보다 크거나 작거나 같지 않습니다. num1! = num2 만 true로 평가됩니다.

int? num1 = 10;
int? num2 = null;
if (num1 >= num2)
{
    Console.WriteLine("num1 is greater than or equal to num2");
}
else
{
    // This clause is selected, but num1 is not less than num2.
    Console.WriteLine("num1 >= num2 returned false (but num1 < num2 also is false)");
}

if (num1 < num2)
{
    Console.WriteLine("num1 is less than num2");
}
else
{
    // The else clause is selected again, but num1 is not greater than 
    // or equal to num2.
    Console.WriteLine("num1 < num2 returned false (but num1 >= num2 also is false)");
}

if (num1 != num2)
{
    // This comparison is true, num1 and num2 are not equal.
    Console.WriteLine("Finally, num1 != num2 returns true!");
}

// Change the value of num1, so that both num1 and num2 are null.
num1 = null;
if (num1 == num2)
{
    // The equality comparison returns true when both operands are null.
    Console.WriteLine("num1 == num2 returns true when the value of each is null");
}

/* Output:
 * num1 >= num2 returned false (but num1 < num2 also is false)
 * num1 < num2 returned false (but num1 >= num2 also is false)
 * Finally, num1 != num2 returns true!
 * num1 == num2 returns true when the value of each is null
 */


답변

요약 : 널 (null) 어떤 불평등 비교 ( >=, <, <=, >)를 반환 false두 피연산자가 null의 경우에도 마찬가지입니다. 즉

null >  anyValue //false
null <= null     //false

null ( ==, !=) 과의 동등 또는 비 균등 비교 는 ‘예상대로’작동합니다. 즉

null == null     //true
null != null     //false
null == nonNull  //false
null != nonNull  //true


답변

C #과 SQL 비교

C # : a = null 및 b = null => a == b => true

SQL : a = null 및 b = null => a == b => false


답변