2014-08-27 27 views
-4

我有這樣的代碼:爲什麼「!=」不能與長時間相比?

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(很長)無法與null相比?

+7

長期不能爲空。你將不得不有一個很長的/可空值它甚至得到一個空值。 – 2014-08-27 21:48:45

+0

爲什麼?這種方式與其他數據類型有什麼不同? – 2014-08-27 21:49:33

+3

int,long,double,float等可以爲null,因爲它們是值類型,因爲它們不是可以爲空的類型。 – 2014-08-27 21:50:02

回答

3

ContentLength是一個Int64它不是一個可爲空的類型。 A string可以是null,因此轉換爲字符串可以進行比較。

+0

但是'ContentLength.ToString()'永遠不會返回'null'。 – 2014-08-28 22:16:08

2

這是因爲long是一個值類型,值類型永遠不能爲空。

如果您想通過聲明它像這樣來分配無效於基本類型,例如intlong, double等您可以:

long? myLong = null; 
+0

可能不是在我的情況下,我在Windows上使用.NET 0.9 for Workgroups,使用鍵盤,圓形監視器和閃爍的綠色光標(僅適用於輕微誇張)。 – 2014-08-27 22:11:11

相關問題