1. ホーム
  2. vb.net

[解決済み] DateTime'が'Nothing'であるかどうかをチェックできないのはなぜですか?

2023-06-16 05:31:07

質問

VB.NETで、以下のように DateTime 変数を "notset"に設定する方法はありますか?また、なぜ DateTimeNothing が、しかし ではなく であるかどうかを確認することは可能です。 Nothing ? 例えば

Dim d As DateTime = Nothing
Dim boolNotSet As Boolean = d Is Nothing 

2番目のステートメントがこのエラーを投げます。

'Is' operator does not accept operands of type 'Date'. Operands must be reference or
nullable types.

どのように解決するのですか?

これは、VB.Net の最大の混乱の原因の 1 つだと思います。

Nothing というのは、VB.Netでは default(T) と等価であり、与えられた型のデフォルト値です。

  • 値型の場合、これは本質的に「ゼロ」に相当します。 0 に対して Integer , False に対して Boolean , DateTime.MinValue に対して DateTime , ...
  • 参照型の場合は null 値 (まあ、何も参照しない参照) になります。

ステートメントが d Is Nothing は次のようになります。 d Is DateTime.MinValue と同じで、明らかにコンパイルできません。

解決策:他の人が言っているように

  • 次のいずれかを使用します。 DateTime? (を使うか(例 Nullable(Of DateTime) ). これは私が推奨する解決策です。
  • または使用する d = DateTime.MinValue または同等に d = Nothing

元のコードの文脈では、使えます。

Dim d As DateTime? = Nothing
Dim boolNotSet As Boolean = d.HasValue

より包括的な説明は アンソニー・D・グリーンのブログ