如果intellisense显示HasValue属性,它是否意味着该类型可以为空?

时间:2015-01-16 19:16:39

标签: c# nullable

在我们的ADO框架代码库中,我找到了这个定义:

// Reference_System_RTK 
public Company.Framework.Data.DbTypes.DbString Reference_System_RTKField 
{ 
    get {return this.DbString("Reference_System_RTK");} 
    set {this.DbString("Reference_System_RTK", value);} 
} 

在我希望阅读其值的代码中,我还会在智能感知建议中看到.Value.HasValue。 所以我的问题是当intellisense显示这些属性时它是否始终意味着它是null able type?所以我应该总是HasValue and .Value来获得它的价值?我不能只引用字段名称吗?

        PrimaryKeysCrossReferenceTable.PrimaryKeysCrossReferenceDataRow tempDataRow = tblPrimaryKeysCrossReference.Rows[0] as PrimaryKeysCrossReferenceTable.PrimaryKeysCrossReferenceDataRow;
        if (tempDataRow != null && tempDataRow.Reference_System_RTKField.HasValue)
            result = tempDataRow.Reference_System_RTKField.Value;

VS

result = tempDataRow.Reference_System_RTKField;

我没有收到其中任何一个的编译错误。 我还查看了SQL Server中的表列定义,并在该字段中显示了"not null"

1 个答案:

答案 0 :(得分:1)

事实上Nullable以外的类型可能有ValueHasValue属性,所以不,因为类型具有这些属性并不意味着它是一个Nullable的实例。