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 및 b = null => a == b => true
SQL : a = null 및 b = null => a == b => false