web-dev-qa-db-ja.com

「DateTime」とは何ですか? C#ではどうですか?

私は.Netの本を読んでいますが、コード例の1つにこのフィールドを持つクラス定義があります:

private DateTime? startdate

DateTime?意味?

67
Alvin S

DateTimestructではなくclassであるため、そのタイプのフィールドまたは変数を宣言すると、referenceではなくDateTimeobjectを取得します。

また、intnullにすることはできないのと同じように、このDateTimeオブジェクトは参照ではないため、nullにすることはできません。

疑問符を追加すると、それが nullable type に変わります。つまり、eitherDateTimeオブジェクトであり、またはそれはnullです。

DateTime?Nullable<DateTime>の構文シュガーです。ここで Nullable はそれ自体がstructです。

129
Thomas

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でもかまいません。

23
Daniel Auger

を値型の接尾辞として使用すると、他の方法では不可能なヌルの割り当てが可能になります。

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>と構文的に同等です。

13
Jorge Ferreira

Nullable <DateTime>と同等です。 「?」を追加できます任意のプリミティブ型または構造体に。

10
Ted Elliott

基本的に、プリミティブの追加状態を提供します。値にすることも、nullにすることもできます。値を割り当てる必要がない状況で役立ちます。そのため、たとえばdatetime.minまたはmaxを使用する代わりに、nullを割り当てて値がないことを表すことができます。

5
mattlant

ご存じのように、DateTimeは構造体であり、DateTimeは値型です。したがって、DateTimeはクラスではないため、参照ではなくDateTimeオブジェクトを取得します。 nullを受け入れないでください。同様に、intをnullにすることはできません。したがって、DateTimeオブジェクトは参照ではないため、nullになることはありません。

ただし、nullを許可する変数または値型のフィールドが必要な場合があります。その場合は、nullを許可するように疑問符を使用してnullを許可する型にします。

例:-

日付時刻?日付= null;

int? intvalue = null;

上記のコードでは、変数dateはDateTimeのオブジェクトであるか、nullです。 intvalueについても同じです。

1
Sonu Rajpoot