【问题标题】:Why can "!=" not be compared to a long?为什么“!=”不能比作long?
【发布时间】: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


【解决方案1】:

ContentLength 是一个Int64,它不是可空类型。 string 可以是 null,因此转换为字符串允许进行比较。

【讨论】:

  • 但是ContentLength.ToString() 永远不会返回null
【解决方案2】:

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

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

 long? myLong = null;

【讨论】:

猜你喜欢
  • 2020-09-01
  • 2020-11-11
  • 1970-01-01
  • 1970-01-01
  • 2015-08-10
  • 2019-06-28
  • 2021-01-13
  • 2013-11-19
  • 2015-12-15
相关资源
最近更新 更多