c#获取并设置访问器datetime

c#获取并设置访问器datetime,c#,asp.net,C#,Asp.net,我收到在我的属性中检测到的无法访问的代码。这适用于常规字符串字段,但不适用于日期时间数据类型 private DateTime m_RenewalDate; public DateTime M_RenewalDate { get { return m_RenewalDate != null ? m_RenewalDate : DateTime.MinValue; } set { m_RenewalDa

我收到在我的属性中检测到的无法访问的代码。这适用于常规字符串字段,但不适用于日期时间数据类型

private DateTime m_RenewalDate;
    public DateTime M_RenewalDate
            {
                get { return m_RenewalDate != null ? m_RenewalDate : DateTime.MinValue; }
                set { m_RenewalDate = value; }
            }
这是我的sqldatareader

reader.GetDateTime(reader.GetOrdinal("M_RENEWALDATE"))

DateTime
是一种值类型,不能为空。因此,无法访问getter中的代码:

return m_RenewalDate != null ? // always evaluates to true
       m_RenewalDate :         // and therefore always returns this
       DateTime.MinValue;      // The code never hits this case.

如果数据库中的字段可以为null,则可能需要将属性声明为可为null的DateTime:
DateTime?
DateTime
是一种值类型,不能为null。要与数据库中的空值进行比较,请使用
DBNull.value

,正如德里斯在回答中所说,
m_RenewalDate==null
始终为false,因为
DateTime
是一种值类型,并且声明为值类型的内容不能为null

要使
get
M_RenewalDate
返回
DateTime.MinValue
的行为,在
M_RenewalDate
null
的情况下,读卡器代码应该更像这样

object renewalDate = reader.GetValue(reader.GetOrdinal("M_RENEWALDATE"));

if (Equals(renewalDate, DBNull.Value))
{
    yourObject.M_RenewalDate = DateTime.MinValue;
}
else
{
    yourObject.M_RenewalDate = (DateTime) renewalDate;
}

私人DateTime m_RenewalDate;