我有一个类型为bit的DBIsValid,可以为空。
我有一个类型为bool的变量IsValid,如果DBIsvalid为True,我想将其设置为True。我的下面的代码行应该正常工作还是应该检查NULL。
bool IsValid = this.DBIsValid.Value
如果在DB中为NULL,DBIsValid基本上会返回false吗?
答案 0 :(得分:7)
您应该使用HasValue
属性,如果值为null,则访问.Value
将引发异常。
获得价值的另一种更安全的方法是使用GetValueOrDefault
bool IsValid = this.DBIsValid.GetValueOrDefault();
答案 1 :(得分:1)
不,它有三种状态:true
,false
和null
,null
表示没有价值。
如果您在this.DBIsValid.Value
为this.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