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;