2012-10-17 41 views
2

我收到我的屬性中檢測到無法訪問的代碼。這適用於常規字符串字段,但不適用於DateTime數據類型。c#get和set訪問器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

如何你的領域界定? –

+0

private DateTime m_RenewalDate; – Tim

回答

0

正如driis說,他的回答,m_RenewalDate == null永遠是假的爲DateTime是值類型和事物聲明爲值類型不能爲null。

要使getM_RENEWALDATE的話返回從M_RenewalDateDateTime.MinValue的行爲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; 
} 
10

DateTime是值類型,並且不能爲空。因此,在吸氣的代碼無法訪問:

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

如果你的數據庫中的字段可以爲空,也許你想申報財產作爲一個可空的DateTime:DateTime?

1

DateTime是一個值類型,不能爲空。要在數據庫中的空值進行比較,使用DBNull.Value