[英]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();
不,它具有三种状态: true
, false
和null
, null
表示没有值。
如果在this.DBIsValid
为null
时访问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.