我需要做一些重构,我遇到了这个:
if(LoanTerms.RateIncreasable.HasValue && LoanTerms.RateIncreasable.Value) { ... }
且LoanTerms.RateIncreasable
的类型为System.Nullable<bool>
所以我想知道我需要.HasValue
检查吗? if null
会在if语句中被视为false吗?
答案 0 :(得分:11)
由于默认bool
为false
,您可以使用此代码执行您需要的所有操作:
if(LoanTerms.RateIncreasable.GetValueOrDefault()) { ... }
有关详细信息,请查看MSDN: Nullable(T).GetValueOrDefault()上的文档。
但要回答您的问题:如果Value
值为Nullable<T>
(即Nullable<T>
,请阅读null
的{{1}}属性是不合法的。 ),你会得到一个例外。因此,如果您绝对必须阅读HasValue == false
,请确保它首先具有值。
答案 1 :(得分:1)
以下代码将处理您的问题。
if(LoanTerms.RateIncreasable.GetValueOrDefault()) { ... }
如果您致电GetValueOrDefault
,则会检查HasValue
是true
还是false
:
public T GetValueOrDefault(T defaultValue)
{
return HasValue ? value : defaultValue;
}