当NULL为空时,可空的位字段将返回false

时间:2015-02-18 21:19:03

标签: c# sql-server

我有一个类型为bit的DBIsValid,可以为空。

我有一个类型为bool的变量IsValid,如果DBIsvalid为True,我想将其设置为True。我的下面的代码行应该正常工作还是应该检查NULL。

bool IsValid = this.DBIsValid.Value

如果在DB中为NULL,DBIsValid基本上会返回false吗?

4 个答案:

答案 0 :(得分:7)

您应该使用HasValue属性,如果值为null,则访问.Value将引发异常。

获得价值的另一种更安全的方法是使用GetValueOrDefault

bool IsValid = this.DBIsValid.GetValueOrDefault();

答案 1 :(得分:1)

不,它有三种状态:truefalsenullnull表示没有价值。

如果您在this.DBIsValid.Valuethis.DBIsValid时访问null,则会引发异常。

如果您希望null值的含义为false,则必须测试以下任何一项:

bool IsValid = this.DBIsValid ??  false; // commom pattern for a default
bool IsValid = this.DBIsValid.GetValueOrDefault(); // works because false is the default value for booleans
bool IsValid = this.DBIsValid.HasValue && this.DBIsValid.Value; // interprets no value as false

答案 2 :(得分:1)

如果它可以为空,那么您将收到null(既不是真也不是假)。

虽然引用任何类型的Nullable<T>,但您应该检查HasValue。或者,如果您在存在空值时具有所需的值,则可以使用GetValueOrDefault

// Value coming from database
Boolean? db_IsValid = null;

// Option 1:
// Check for null
Boolean IsValid = db_IsValue.HasValue ? db_IsNull.Value : false;

// Option 2:
// Using GetValueOrDefault
Boolean IsValid = db_IsValid.GetValueOrDefault(/*optional: false*/);
// note above, without parameter, returns default(Boolean)

// Option 3:
// Syntactical sugar (producing same output as Option 1 or 2)
Boolean IsValid = IsValid ?? false;

答案 3 :(得分:0)

使用null合并运算符??如下图所示

bool IsValid = this.DBIsValid ?? false