本サイトはアフィリエイト広告を使用しています

c# DateTime プログラミング

【C#】datetime?をdatetimeに変換する方法|System.DateTimeを暗黙的に変換できません。明示的な変換が存在します。

本記事でわかる事

datetime? を datetime に変換する方法


datetime?をdatetimeに変換する方法

こんなコンパイルエラーが出る

datetime?をdatetimeに変換

おそらくこんなコンパイルエラーが発生してお悩みだと思います。

'System.DateTime?' を 'System.DateTime' に暗黙的に変換できません。明示的な変換が存在します(castが不足していないかどうか確認してください)

 

簡単に回避する方法があるので紹介します。

'System.DateTime?' を 'System.DateTime' に暗黙的に変換できません。を解決する方法

いくつか解決する方法があるので紹介していきます。

解決法 - その1 |null合体演算子を使った方法

ソースコード



ポイントは「??」。

「??」null合体演算子というものです。

  • 左辺の「dateTime1」が null じゃなかったら、左辺を返す
  • 左辺の「dateTime1」が null だったら、右辺を返す

というもの。

こういうコードを書き、ブレイクを貼りデバッグしてみるとイメージつかめると思います。

解決法 - その2|キャスト(型変換)する

ソースコード



とくに解説不要、コードのままです。

 

ただし、気を付けないと例外発生します。以下の通りです。

datetime?をdatetimeに変換

こんな例外が発生するよ

System.InvalidOperationException: 'Null 許容のオブジェクトには値を指定しなければなりません。'

dateTime1 = null; の後に、nullをDateTimeにキャストした時に例外が発生しています。

なので、キャストする前にnullチェックは必須かなと思います。

解決法 - その2|キャスト(型変換)する

ソースコード



「if (dateTime1.HasValue)」でdateTime1という変数が値をもっているかチェックします。

値をもっていれば、HasValueでTrueが返るので、if文の中が実行されます。

nullで値を持っていない場合は、HasValueでFalseが返るので、if文の中が実行されません。

実際の値を取得するときには、「dateTime1.Value」で値取得できます。

まとめ|datetime?をdatetimeに変換する方法

  • null合体演算子「??」を使う
  • キャスト(型変換)してあげる(例外に気を付ける)
  • HasValueで値を持っているかチェックして値取得

 

【必見】C# 初心者におすすめの参考書

  • はじめの1冊に最適
  • 手元に置いておきたい独習シリーズ
created by Rinker
¥652 (2024/04/26 05:35:13時点 Amazon調べ-詳細)
  • 名著。技術屋なら必読。繰り返しよむことで確実にレベルアップ。

-c#, DateTime, プログラミング