检查T.的Nullabe的.HasValue和.Value

本文关键字:Value HasValue Nullabe 检查 | 更新日期: 2023-09-27 18:28:26

我需要进行一些重构,我遇到了这样的问题:

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

并且CCD_ 1是类型CCD_

所以我想知道我需要.HasValue检查吗?在if语句中,null会被当作false处理吗?

检查T.的Nullabe的.HasValue和.Value

由于bool的默认值是false,因此您可以使用此代码来完成所需的一切:

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

有关更多信息,请参阅MSDN上的文档:Nullable(T).GetValueOrDefault().

但为了回答您的问题:如果Nullable<T>的值是LoanTerms.RateIncreasable0(即HasValue == false),那么读取Nullable<T>Value属性是不合法的,您将得到一个异常。因此,如果您绝对必须读取Value,请首先确保它有一个值。

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

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

如果您调用GetValueOrDefault,它会检查HasValuetrue还是false:

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