2014-08-27 2 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 (длинный) несравнимо с нулевым?

+7

долго не может быть пустым. У вас должен быть длинный?/Nullable , чтобы он даже получил нулевое значение. –

+0

Почему? Что делает таким образом отличным от других типов данных таким образом? –

+3

int, long, double, float и т. Д. Могут быть пустыми, поскольку они не являются нулевыми типами, потому что они являются типами значений. –

ответ

3

ContentLength - Int64, который не является нулевым типом. A string может быть null, поэтому преобразование в строку позволяет сравнивать.

+0

Но 'ContentLength.ToString()' никогда не вернет 'null'. –

2

Это потому, что long - тип значения и типы значений никогда не может быть нулевым.

Если вы хотите присвоить значение NULL для примитивного типа, такие как int, long, double и т.д. Вы можете объявляя это следующим образом:

long? myLong = null; 
+0

Возможно, не в моем случае, когда я использую .NET 0.9 для Windows для рабочих групп с clacky-клавиатурой, округлым монитором и мигающим зеленым курсором (только с небольшими преувеличениями). –

Смежные вопросы