私は.Netの本を読んでいますが、コード例の1つにこのフィールドを持つクラス定義があります:
private DateTime? startdate
DateTime?
意味?
DateTime
はstruct
ではなくclass
であるため、そのタイプのフィールドまたは変数を宣言すると、referenceではなくDateTime
objectを取得します。
また、int
をnull
にすることはできないのと同じように、このDateTime
オブジェクトは参照ではないため、null
にすることはできません。
疑問符を追加すると、それが nullable type に変わります。つまり、eitherはDateTime
オブジェクトであり、またはそれはnull
です。
DateTime?
はNullable<DateTime>
の構文シュガーです。ここで Nullable
はそれ自体がstruct
です。
Null許容のDateTimeです。 ?
プリミティブ型/構造の後は、null許容バージョンであることを示します。
DateTimeは、nullにならない構造です。 [〜#〜] msdn [〜#〜] から:
DateTime値タイプは、0001年1月1日深夜12:00:00、Anno Domini、またはAD(Common Era、またはCEとも呼ばれる)から9999年12月31日11:59:59までの範囲の日付と時刻を表します。 AD(CE)
DateTime?
はnullでもかまいません。
?を値型の接尾辞として使用すると、他の方法では不可能なヌルの割り当てが可能になります。
http://msdn.Microsoft.com/en-us/library/b3h38hb0.aspx
基になる型がnull参照を割り当てることもできる値型であるオブジェクトを表します。
これは、次のような記述ができることを意味します。
DateTime? a = null;
if (!a.HasValue)
{
a = DateTime.Now;
if (a.HasValue)
{
Console.WriteLine(a.Value);
}
}
DateTime?は、Nullable <DateTime>と構文的に同等です。
Nullable <DateTime>と同等です。 「?」を追加できます任意のプリミティブ型または構造体に。
基本的に、プリミティブの追加状態を提供します。値にすることも、nullにすることもできます。値を割り当てる必要がない状況で役立ちます。そのため、たとえばdatetime.minまたはmaxを使用する代わりに、nullを割り当てて値がないことを表すことができます。
ご存じのように、DateTimeは構造体であり、DateTimeは値型です。したがって、DateTimeはクラスではないため、参照ではなくDateTimeオブジェクトを取得します。 nullを受け入れないでください。同様に、intをnullにすることはできません。したがって、DateTimeオブジェクトは参照ではないため、nullになることはありません。
ただし、nullを許可する変数または値型のフィールドが必要な場合があります。その場合は、nullを許可するように疑問符を使用してnullを許可する型にします。
例:-
日付時刻?日付= null;
int? intvalue = null;
上記のコードでは、変数dateはDateTimeのオブジェクトであるか、nullです。 intvalueについても同じです。