重複の可能性:
DateTimeの「null」値
C#には、Null可能ではない多くの組み込みクラスがあります。たとえば、Datetimeの場合、datatimeオブジェクトがnullかどうかを確認したいのですが、許可されていません。日時クラスにnull可能性を挿入するにはどうすればよいですか?
重複の可能性:
DateTimeの「null」値
C#には、Null可能ではない多くの組み込みクラスがあります。たとえば、Datetimeの場合、datatimeオブジェクトがnullかどうかを確認したいのですが、許可されていません。日時クラスにnull可能性を挿入するにはどうすればよいですか?
つまり、構造体は値型です。値の型は常に有効である必要があり (構造体コンストラクターですべてのメンバーを初期化する必要があるのはそのためです)、null にすることはできません。
ただし、チートがあります。
を使用できますNullable<T>
。それ以外の場合"T?"
は、null 許容の参照で値の型をラップするために使用できます。
使用法:
DateTime? foo = new DateTime(...);
foo.Value.<datetime member>
C# には、Nullable でない組み込みクラスが多数あります。
それら ( Datetime
) は値の型である構造体であり、クラスではないため、null 非許容です。
参照型とは異なり、値型に null 値を含めることはできません。ただし、null 許容型機能により、値型を null に割り当てることができます。
Nullable<T>
withを使用しDateTime
て nullable にすることができます。
DateTime? dateTimeObject = null;
の疑問符?
はDateTime
、Nullable にします。
構文 T? Nullable の省略形で、T は値の型です。2 つの形式は交換可能です。
確かに、宣言を変更することで、整数、倍精度、日時などをヌル可能にすることができます。
DateTime? dt = null.
しかし
知っておくべきことが 2 つあります。
1) 日時? と DateTime は同じデータ型ではないため、次のようにすると:
DateTime? date1 = null;
date1 = DateTime.Now;
DateTime date2 = date1; // Wont work.
null 許容型の値にアクセスする正しい方法は次のとおりです。
DateTime date2 = date1.Value;
2) 2 つ目は、使用する前に値があるかどうかを常に確認する必要があることです。
DateTime? date1 = null;
DateTime date2 = date1.Value;
これにより、「Nullable オブジェクトには値が必要です」という例外がスローされます。
したがって、null 許容演算子を追加するのはそれほど簡単ではありません。変数を使用するたびにプロパティ「HasValue」を確認する必要があります。
DateTime? date1 = DateTime.Now;
if(date1.HasValue)
{
DateTime date2 = date1.Value;
}
nullable を賢く使用してください。
?
タイプの最後に文字を追加できます。
DateTime? date;
厳密に言えば、DateTime
a struct
(つまり、値の型) であり、a class
(参照型) ではないため、null 許容ではありません。Nullable<DateTime>
、別名DateTime?
はnull可能ですが。Nullable<T>
コンパイラによる特別な処理があり、 、( 経由)、および他のほとんどの操作(いわゆる「持ち上げられた演算子」経由)struct
に関して、期待どおりに機能します。==
!=
.HasValue
DateTime
ですstruct
ので、そうですvalue types
。値の型を にすることはできませんnull
。nullable types
forDateTime
または他の値の型を使用できない場合。
Null 許容型は、System.Nullable 構造体のインスタンスです。null 許容型は、基になる値の型の正しい範囲の値に加えて、追加の null 値を表すことができます。
Nullable 型は疑問符で表されます?
。例えば;
DateTime? date = null;
DateTime?
ちなみにに相当しSystem.Nullable<DateTime>
ます。
nullable を使用DateTime
すると、値があるかどうかを確認できます。
if(date.HasValue == true)
==
そしてもちろん、 やのような等号演算子と一緒に使用できます。!=