1

重複の可能性:
DateTimeの「null」値

C#には、Null可能ではない多くの組み込みクラスがあります。たとえば、Datetimeの場合、datatimeオブジェクトがnullかどうかを確認したいのですが、許可されていません。日時クラスにnull可能性を挿入するにはどうすればよいですか?

4

7 に答える 7

4

つまり、構造体は値型です。値の型は常に有効である必要があり (構造体コンストラクターですべてのメンバーを初期化する必要があるのはそのためです)、null にすることはできません。

ただし、チートがあります。

を使用できますNullable<T>。それ以外の場合"T?"は、null 許容の参照で値の型をラップするために使用できます。

使用法:

DateTime? foo = new DateTime(...);

foo.Value.<datetime member>
于 2013-01-30T11:25:05.060 に答える
4

C# には、Nullable でない組み込みクラスが多数あります。

それら ( Datetime) は値の型である構造体であり、クラスではないため、null 非許容です。

MSDN - 値の型

参照型とは異なり、値型に null 値を含めることはできません。ただし、null 許容型機能により、値型を null に割り当てることができます。

Nullable<T>withを使用しDateTimeて nullable にすることができます。

DateTime? dateTimeObject = null;

の疑問符?DateTime、Nullable にします。

構文 T? Nullable の省略形で、T は値の型です。2 つの形式は交換可能です。

于 2013-01-30T11:18:19.950 に答える
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 を賢く使用してください。

于 2013-01-30T11:27:10.493 に答える
2

?のように使用するだけで十分です

DateTime? dt = null;

したがって、null非許容型はNullable型になります

于 2013-01-30T11:18:14.713 に答える
2

?タイプの最後に文字を追加できます。

DateTime? date;
于 2013-01-30T11:19:24.183 に答える
1

厳密に言えば、DateTimea struct(つまり、値の型) であり、a class(参照型) ではないため、null 許容ではありません。Nullable<DateTime>、別名DateTime? null可能ですが。Nullable<T>コンパイラによる特別な処理があり、 、( 経由)、および他のほとんどの操作(いわゆる「持ち上げられた演算子」経由)structに関して、期待どおりに機能します。==!=.HasValue

于 2013-01-30T11:18:44.423 に答える
1

DateTimeですstructので、そうですvalue types。値の型を にすることはできませんnullnullable typesforDateTimeまたは他の値の型を使用できない場合。

Null 許容型は、System.Nullable 構造体のインスタンスです。null 許容型は、基になる値の型の正しい範囲の値に加えて、追加の null 値を表すことができます。

Nullable 型は疑問符で表されます?。例えば;

DateTime? date = null;

DateTime?ちなみにに相当しSystem.Nullable<DateTime>ます。

nullable を使用DateTimeすると、値があるかどうかを確認できます。

if(date.HasValue == true)

==そしてもちろん、 やのような等号演算子と一緒に使用できます。!=

于 2013-01-30T11:18:52.463 に答える