2

プロパティで到達不能コードが検出されました。これは通常の文字列フィールドでは機能しましたが、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"))
4

3 に答える 3

10

DateTimeは値型であり、nullにすることはできません。したがって、ゲッターのコードには到達できません。

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?

于 2012-10-17T16:47:42.017 に答える
1

DateTimeは値型であり、nullにすることはできません。データベース内のnull値と比較するには、次を使用します。DBNull.Value

于 2012-10-17T16:51:52.100 に答える
0

driisが彼の答えで言ったように、値型とm_RenewalDate == null同様に常にfalseでDateTimeあり、値型として宣言されたものをnullにすることはできません。

リーダーコードの場合にget戻る動作をDateTime.MinValueするには、次のようになります。M_RenewalDateM_RENEWALDATEnull

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

if (Equals(renewalDate, DBNull.Value))
{
    yourObject.M_RenewalDate = DateTime.MinValue;
}
else
{
    yourObject.M_RenewalDate = (DateTime) renewalDate;
}
于 2012-10-17T17:49:52.543 に答える