为什么“!=”不能比较长?

时间:2014-08-27 21:46:26

标签: c# null httpwebrequest long-integer

我有这样的代码:

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);
}

...因编译时错误而失败,“运算符'!='无法应用于''和'long'类型的操作数”

我可以附加一个ToString()来编译它:

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

......但这看起来很奇怪。为什么HttpWebRequest的ContentLength(很长)与null无法比较?

2 个答案:

答案 0 :(得分:3)

ContentLengthInt64,不是可以为空的类型。 string可以是null,因此转换为字符串可以进行比较。

答案 1 :(得分:2)

那是因为long是一个值类型,值类型永远不能为空。

如果您想将null分配给基本类型,例如intlong, double等,您可以将其声明为:

 long? myLong = null;