在C#中检查布尔变量是否初始化

4

我有一个模型中的 bool 变量,如下所示。

bool Foo;

我正在从服务器接收数据并将其反序列化为模型对象。因此,所有在服务器数据中不存在的字段都将被初始化为默认值。default(bool)是false。

但是,对于我的变量Foo,值false也是可接受的值。那么有没有办法检查它是否从服务器得到了值false或默认值。

我还遇到了其他类型(如int,double等)的相同问题,这些类型不会默认为空。


9
你考虑过使用 bool? 吗? - Marc Gravell
@MarcGravell 在反序列化时,如果数据没有从服务器发送过来,那么它的值会是 null 而不是 false 吗?只是想确认一下。 - pratpor
如果没有明确分配非空值,则返回“是,null”。 - Marc Gravell
2个回答

17

如果是我,我会使用 Nullable<bool> (bool?)。这样你就能通过以下方式检查值:

bool? Foo;

if(Foo.HasValue)
{
   // do something with Foo.Value
}
else
{
   // Foo is uninitialized
}

太好了,谢谢。我不知道这个。现在我必须改变我的整个代码来按照这种方式制作int、double等 :( - pratpor

0
在我的系统上(Microsoft (R) Visual C# Compiler version 4.7.3190.0),被接受的答案不完整:编译器错误。只需要将变量声明初始化为null即可,如下所示:
bool? Foo = null;

if (Foo.HasValue)
{
    // do something with Foo.Value 
}
else
{
    // Foo is uninitialized
}

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