【发布时间】:2014-08-27 21:46:26
【问题描述】:
我有这样的代码:
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 (a long) 无法与 null 比较?
【问题讨论】:
-
long 永远不能为空。您必须有一个 long?/Nullable
才能获得空值。 -
为什么?是什么让 long 以这种方式与其他数据类型不同?
-
int、long、double、float 等可以为空,因为它们是值类型,因此它们不是可空类型。
-
@B.ClayShannon,long 是值类型,值类型不能为空。它不是唯一的,所有结构都是值类型。
-
该死的看起来我应该把我的评论作为得到一些分数的答案。 ;)
标签: c# null httpwebrequest long-integer