2014-08-27 2 views
-4

내가있어이 같은 코드 :왜 "! ="를 long과 비교할 수 없습니까?

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); 
. . . 
if (null != request.UserAgent) 
{ 
    str = String.Format("userAgent == {0}", request.UserAgent.ToString()); 
    MessageBox.Show(str); 
} 
. . . // many other similar ones, comparing null to string, etc. types 

하지만이 하나 '! ='

if (null != request.ContentLength) 
{ 
    str = String.Format("contentLength == {0}", request.ContentLength.ToString()); 
    MessageBox.Show(str); 
} 

...이, "운영자의 컴파일 타임 오류에 적용 할 수 없습니다 실패 유형의 피연산자 ''와 '에

가 나는 ToString을 추가 할 수 있습니다 "'롱 (받을)는 컴파일 :

if (null != request.ContentLength.ToString()) 
. . . 

...하지만 이상하게 보입니다. HttpWebRequest의 ContentLength (long)가 null과 비교할 수없는 이유는 무엇입니까?

+7

긴 null이 될 수 없다. null 값을 얻으려면 long/Nullable 을 가져야합니다. –

+0

왜? 그런 식으로 다른 데이터 유형과 구별되는 점은 무엇입니까? –

+3

int, long, double, float 등은 값 유형이므로 null 가능 유형이 아니므로 null 일 수 있습니다. –

답변

3

ContentLength은 Null 허용 유형이 아닙니다 Int64입니다. stringnull 일 수 있으므로 문자열로 변환하면 비교가 가능합니다.

+0

하지만'ContentLength.ToString()'은 결코 null을 반환하지 않습니다. –

2

long은 값 유형이고 값 유형은 절대 null 일 수 없기 때문입니다.

이처럼 선언하여 원시 형과 같은 int, long, double 등 당신이 할 수있는 null로 지정하려는 경우 :

long? myLong = null; 
+0

아마 내 경우에는, clacky 키보드, 둥근 모니터 및 녹색 커서 (약간의 과장) 만 깜빡이는 Windows for Workgroups에서 .NET 0.9를 사용하고있을 것입니다. –

관련 문제