【问题标题】:Check if integer == null [closed]检查整数 == null [关闭]
【发布时间】:2016-09-23 15:56:29
【问题描述】:

我想检查我的 Listentry 是否 = null 但我不知道怎么做。

注意: ID 是一个整数

这是我的代码

if(MeineGaeste[i].ID !=null)
{
    i++;
}
else
{
    MeinGast.ID = i++;
    test = false;
}

【问题讨论】:

  • 整数不能为空。是声明为int 还是int?
  • 如果ID 成员被声明int,那么比较ID != null 是没有意义的。您将收到有关它的编译时警告。
  • 我投票结束这个问题,因为它缺少重要的细节,比如相关变量的数据类型。提供的代码在else 条件中调用无效逻辑也无济于事(尝试增加null 值,如果调用它应该会出错,假设它编译)。换句话说,仅仅能够理解作者的意图并没有足够的意义。

标签: c# if-statement null integer


【解决方案1】:

int 不能为空。另一方面,可以为 null 的 int,int?。话虽这么说,你想做的检查是没有意义的。

ID的类型从int改成int?,你做的检查是有意义的,编译器不会报错的。

【讨论】:

  • 谢谢你的回答。但是我如何使用int?在我的程序中。?
  • 感谢您的回答,但是我可以使用 int 吗?在我的程序中?这是我学校项目的一小部分。
  • @不客气。这取决于你想做什么。老实说,我没有得到想要达到的目标。但是,正如我从您的帖子中推断的那样,您可能需要做的第一件事是将 ID 的类型从 int 更改为 int?
  • 所以?私人诠释? _ID;公共诠释? ID { 获取 { 返回 _ID; } 设置 { _ID = 值; } }
  • 这怎么可能?由于 ID 的类型是可为 null 的 int,因此 ID 可以为 null。
【解决方案2】:

因为普通的int类型是值类型,所以不能是null

您可以为属性ID 使用可空类型int?,它基本上是一个结构,它允许null 或任何int 值。有关其他文档,请参阅 MSDNthis questionthis question

如果无法更改 ID 属性的类型,解决方法可能是选择一个整数作为标记值,​​该值保证不会出现在您的模型中(例如 Int32.MinValue,因为大多数生成的 ID 似乎为正整数)。 如果没有必要,请不要这样做,因为这很可能会导致错误。如果您使用该标记值序列化模型,我至少建议您抛出异常。

【讨论】:

  • 谢谢,我知道,我的问题并不完美。我需要一个替代方案。
【解决方案3】:

如上所述,int 不能为空。如果未为其设置值,则我认为默认值为零。如果您认为它被设置为,您可以检查 0...

否则,如果您热衷于避免可空整数,则必须将其转换为字符串然后执行检查。

String.IsNullOrEmpty(ID.ToString());

它返回一个布尔值,因此您可以将其粘贴到 if 语句中。

【讨论】:

  • 我无法理解您的回答。如果您避免使用int?(这意味着IDint),那么ID.toString() 永远不会产生空字符串,从而使检查始终为假。在这种情况下,将任何内容转换为字符串有什么帮助?如果0 是一个有效值,您仍然无法检测到缺失值。
  • @jpmc26 你是正确的,一个 unassigned ID 变量将是零,并将解析为一个字符串为“0”。答案应该是:ID.ToString() == "0" 或类似的东西。
  • 与直接使用ID == 0 检查值相比有什么优势?在这里转换为字符串没有意义;没有功能上的理由这样做。而且这个答案仍然没有解决如何表示或检测缺失值的问题。
  • 更糟糕的是,如果ID 可以nullID.ToString() 实际上会出错。
  • 我没说有优势。 “答案”是 int 不能为空,您可以检查是否为零。转换为字符串只是一个可能有用也可能没有帮助的建议,但是对于提出这个问题的菜鸟来说,他们可能不知道这种方法。
【解决方案4】:

你可以使用这个 ID.HasValue 它在有值时返回 true,如果为 null 则返回 false

【讨论】:

  • 很棒的答案!这有助于解决我的问题。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2018-08-24
  • 1970-01-01
  • 1970-01-01
  • 2016-04-06
  • 2023-03-29
  • 1970-01-01
  • 2010-09-14
相关资源
最近更新 更多