检查整数是否为空。

11

我想检查我的Listentry是否为null,但我不知道如何做。

注意: ID是一个整数

这是我的代码

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

4
整数类型不能为 null。它被声明为 int 还是 int? - Blorgbeard
1
如果ID成员被声明为int,那么比较ID != null就没有意义。编译时会发出警告。 - Jeppe Stig Nielsen
3
我投票关闭这个问题,因为它缺少关键细节,比如所讨论的变量的数据类型。此外,所呈现的代码在else条件中调用无效逻辑(试图增加一个null值,如果被调用应该会出错,假设它可以编译)。换句话说,它不够明确,无法理解作者的意图。 - jpmc26
4个回答

32

如上所述,int类型不能为null。如果没有设置值,则默认值为零。如果您认为值被设置为0,可以进行0检查...

否则,如果您想避免使用可为空的整数,您需要将其转换为字符串,然后执行检查。

String.IsNullOrEmpty(ID.ToString());

该函数返回一个布尔值,因此你可以将其放入if语句中。


1
我无法理解你的答案。如果你避免使用 int?(意味着 ID 是一个 int),那么 ID.toString() 将永远不可能产生空字符串,使得检查始终为 false。在这种情况下,将任何东西转换为字符串有什么帮助呢?如果 0 是一个有效值,你仍然无法检测到丢失的值。 - jpmc26
1
@jpmc26 您是正确的,一个未赋值的ID变量将会是零,并且会被解析为字符串"0"。答案应该是:ID.ToString() == "0" 或者类似这样的内容。 - Ibn Masood
那么这与直接使用 ID == 0 检查值有什么优势呢?在这里转换为字符串毫无意义;没有功能上的理由这样做。而且,这个答案仍然没有解决如何表示或检测缺失值的问题。 - jpmc26
更糟糕的是,如果ID可以为null,那么ID.ToString()实际上会出错。 - jpmc26
我并没有说有什么优势。"答案"是 int 不能为 null,你可以检查是否为零。将其转换为字符串只是一个可能或可能不会有用的建议,但对于问这个问题的新手来说,他们可能不知道这个方法。 - Ibn Masood
显示剩余2条评论

10

int不能为null。另一方面,可为空的int?可以是null。话虽如此,你想要进行的检查是没有意义的。

ID的类型从int更改为int?后,您所做的检查具有含义,编译器也不会抱怨。


1
@不客气。这取决于你想做什么。说实话,我不明白你想要实现什么。然而,从你的帖子中可以推断出,你可能需要做的第一件事是将ID的类型从“int”更改为“int?”。 - Christos
私有的 int? _ID; 公共的 int? ID { 获取 { 返回 _ID; } 设置 { _ID = value; } } - Yannik
没错!顺便说一下,既然你的setter和getter中没有任何逻辑,你可以将上面的代码简化为:public int? ID { get; set; } - Christos
我知道,但这是一份学校作业的一部分 :) 我需要完成它。 - Yannik
1
这怎么可能呢?由于ID的类型是可空整数,所以ID可以为null。 - Christos
显示剩余3条评论

6

您可以使用此ID.HasValue属性,当它有值时返回true,如果为null则返回false。


太棒了!那解决了我的问题。非常感谢你! - Jakxna360
非常好的评论,你帮助我克服了一个潜在的头痛问题。非常感谢你。 - macleash

0

由于普通的int类型是值类型,所以它不能为null

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

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


谢谢,我知道那个,我的问题不是很完美...我需要一个替代方案。 - Yannik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接