int 유형의 두 변수가 있습니까? (또는 원하는 경우 Nullable <int>). 두 변수에 대해 크거나 같음 (> =) 비교를 원했지만 두 변수가 모두 null이면 false를 반환하고 == 연산자는 true를 반환합니다.
> = 연산자의 의미 론적 정의에 “or”라는 단어가 포함되어 있기 때문에 이것이 왜 논리적인지 설명해 줄 수 있습니까?
답변
이 기능이 원래 C # 2.0으로 다시 설계되었을 때이 이상한 점에 대해 큰 논쟁이있었습니다. 문제는 C # 사용자가이 의미에 완전히 익숙하다는 것입니다.
if(someReference == null)
동등성을 nullable 값 유형으로 확장 할 때 다음을 선택할 수 있습니다.
-
Nullable 평등이 진정으로 해제 됩니다. 피연산자 중 하나 또는 모두가 널이면 결과는 참도 거짓도 아닌 널입니다. 이 경우 다음 중 하나를 수행 할 수 있습니다.
-
a)
if
문if
에 nullable bool이 아닌 bool이 필요 하기 때문에 문 에 nullable 값 유형이 같음을 갖는 것은 불법으로 만듭니다 . 대신HasValue
null과 비교 하려면 모든 사람이 사용하도록 요구하십시오 . 이것은 장황하고 자극적입니다. -
b) 자동으로 null을 false로 변환합니다. 이것의 단점은
x==null
x가 null 인 경우 false 를 반환 한다는 것입니다 . 이는 혼란스럽고 참조 유형과의 null 비교에 대한 사람들의 이해에 위배됩니다.
-
-
Nullable 동등성은 해제되지 않습니다. Nullable 같음은 true 또는 false이고 null과의 비교는 null 검사입니다. 이로 인해 nullable 같음이 nullable 부등식과 일치하지 않게됩니다.
이러한 선택 중 어느 것도 분명히 정확하지 않습니다. 그들은 모두 장단점이 있습니다. 예를 들어 VBScript는 1b를 선택합니다. 많은 논쟁 끝에 C # 디자인 팀은 # 2를 선택했습니다.
답변
Equality는 Comparability와 별도로 정의되기 때문입니다.
테스트 할 수는 x == null
있지만 x > null
의미가 없습니다. C #에서는 항상 false입니다.
답변
‘> =’를 설명하는 또 다른 방법은 Not Less Than입니다. 동등에 대한 언급이 없습니다. 비동 등 테스트의 피연산자 중 하나가 Null이면 결과도 알 수 없습니다 (null 임). 그러나 두 피연산자가 모두 Null인지 알고 싶다면 Null == Null이 합리적인 테스트입니다 (결과가 true 여야 함). 연산자의 불평등 부분을 제거하는 것이 모든 차이를 만듭니다.
http://msdn.microsoft.com/en-us/library/2cf62fcy.aspx#sectionToggle4 의 다음 코드 예제는 C #에서 Null을 처리하는 방법을 요약합니다.
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이 아닙니다.
당신은 할 수 과부하>=
특정 유형에 원하는 것을 제공하는 연산자.
답변
NULL은 0 (숫자 또는 2 진 값), 길이가 0 인 문자열 또는 공백 (문자 값)이 아닙니다. 따라서 모든 비교 연산자는 항상 false를 반환합니다.
여기에서 자세히 알아보세요.
답변
어떤 가치를 기대하십니까?
null == null 참
null> = null false
null> null false
null <= null false
null <null false
null! = null false
1 == null 거짓
1> = null 거짓
1> null 거짓
1 <= null 거짓
1 <null 거짓
1! = null true aka! (1 == null)
답변
> =는 잘 정의 된 특정 방식으로 사용될 때 “크거나 같음”만을 의미합니다. 오버로드 된 연산자가있는 클래스에서 사용되면 클래스 개발자가 원하는 모든 것을 의미합니다. 문자열과 같은 클래스에 적용될 때 “동일하거나 더 높은 정렬”을 의미하거나 “동일한 길이 또는 더 긴”을 의미 할 수 있습니다.