繁体   English   中英

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

[英]will a nullable bit field return false when NULL

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

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

bool IsValid = this.DBIsValid.Value

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

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

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

bool IsValid = this.DBIsValid.GetValueOrDefault();

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

如果在this.DBIsValidnull时访问this.DBIsValid.Value ,将引发异常。

如果要为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

如果可以为空,则您将收到一个null (既不是true也不是false)。

但是,当引用任何类型的Nullable<T> ,您应该检查HasValue 或者,如果在为null时具有所需的值,则可以使用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;

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

bool IsValid = this.DBIsValid ?? false

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM