null許容のDateTimeフィールド「BirthDate」があります。既存のコードはこれをこのように処理していました。
info.BirthDate = (DateTime?)reader["Birthdate"];
これにより「無効なキャスト」エラーが発生し、破損します。わかりました。これは、nullがsqlとは異なる方法で返され、「DBNull」タイプであるためです。
これに対する修正は次のようになりました
if (reader["Birthdate"] != DBNull.Value)
{
info.Birthdate = (DateTime)reader["Birthdate"];
}
なぜこれが正確に機能するのか誰かが説明できますか?..私はDBNullの.Value部分で特に迷っています。DBNullとして返される場合、コードはこのブロック内にどのように到達しますか?