비교 연산자는 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 > b
와 a < b
로 평가 false
하기 때문에 a
null의 ...
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 and b=null => a==b => true
SQL: a=null and b=null => a==b => false
참고URL : https://stackoverflow.com/questions/15777745/how-does-comparison-operator-works-with-null-int
'programing tip' 카테고리의 다른 글
html에 vr (수직 규칙)이 있습니까? (0) | 2020.07.07 |
---|---|
node.js에서 기본 시간대를 어떻게 설정합니까? (0) | 2020.07.07 |
Xcode에서 "링크 된 프레임 워크"대신 "내장 바이너리"를 언제 사용해야합니까? (0) | 2020.07.07 |
최대 절전 모드-일괄 업데이트가 업데이트에서 예기치 않은 행 개수를 반환했습니다. 0 실제 행 개수 : 0 예상 : 1 (0) | 2020.07.07 |
IntelliJ 프로젝트 인덱스 재 구축 (0) | 2020.07.07 |