为Nullabe of T检查.HasValue和.Value

时间:2015-12-28 17:39:29

标签: c#

我需要做一些重构,我遇到了这个:

if(LoanTerms.RateIncreasable.HasValue && LoanTerms.RateIncreasable.Value) { ... }

LoanTerms.RateIncreasable的类型为System.Nullable<bool>

所以我想知道我需要.HasValue检查吗? if null会在if语句中被视为false吗?

2 个答案:

答案 0 :(得分:11)

由于默认boolfalse,您可以使用此代码执行您需要的所有操作:

if(LoanTerms.RateIncreasable.GetValueOrDefault()) { ... }

有关详细信息,请查看MSDN: Nullable(T).GetValueOrDefault()上的文档。

但要回答您的问题:如果Value值为Nullable<T>(即Nullable<T>,请阅读null的{​​{1}}属性是不合法的。 ),你会得到一个例外。因此,如果您绝对必须阅读HasValue == false,请确保它首先具有值。

答案 1 :(得分:1)

以下代码将处理您的问题。

if(LoanTerms.RateIncreasable.GetValueOrDefault()) { ... }

如果您致电GetValueOrDefault,则会检查HasValuetrue还是false

public T GetValueOrDefault(T defaultValue)
{
    return HasValue ? value : defaultValue;
}