我收到的属性中检测到无法访问的代码。这适用于常规字符串字段,但不适用于DateTime数据类型。
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"))
答案 0 :(得分:10)
DateTime
是值类型,不能为null。因此,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,或许您希望将该属性声明为可为空的DateTime:DateTime?
。
答案 1 :(得分:1)
DateTime
是值类型,不能为null。要与数据库中的空值进行比较,请使用DBNull.Value
答案 2 :(得分:0)
正如driis在他的回答中所说,m_RenewalDate == null
总是假的,因为DateTime
是一个值类型,声明为值类型的东西不能为空。
要让get
DateTime.MinValue
从[{1}}返回M_RenewalDate
的行为,M_RENEWALDATE
null
,您的读者代码应该更像这样< / p>
object renewalDate = reader.GetValue(reader.GetOrdinal("M_RENEWALDATE"));
if (Equals(renewalDate, DBNull.Value))
{
yourObject.M_RenewalDate = DateTime.MinValue;
}
else
{
yourObject.M_RenewalDate = (DateTime) renewalDate;
}