224
votes

Is there a reason to choose one of these over the other?

DateTime myDate = new DateTime();

or

DateTime myDate = default(DateTime);

Both of them are equal 1/1/0001 12:00:00 AM.

4
Which is equal to DateTime.MinValue, so you could also just do DateTime myDate = DateTime.MinValue as well :/ - Lloyd
@Lloyd Most of the time... but not as a default parameter DateTime.MinValue is not a compile time constant - but default(DateTime)/new DateTime() is. - Ricibob
Just to clarify @Ricibob's excellent comment, because it's important: if you are creating a method with an optional parameter, you can ONLY use either default(DateTime) or new DateTime(). Those are both compile time constants, required for optional parameter values. If compile time constants are not required, then default(DateTime), new DateTime(), and DateTime.MinValue are interchangeable. - leanne

4 Answers

225
votes

No, they are identical.

default(), for any value type (DateTime is a value type) will always call the parameterless constructor.

24
votes

If you want to use default value for a DateTime parameter in a method, you can only use default(DateTime).

The following line will not compile:

    private void MyMethod(DateTime syncedTime = DateTime.MinValue)

This line will compile:

    private void MyMethod(DateTime syncedTime = default(DateTime))
17
votes

The answer is no. Keep in mind that in both cases, mdDate.Kind = DateTimeKind.Unspecified.

Therefore it may be better to do the following:

DateTime myDate = new DateTime(1, 1, 1, 0, 0, 0, DateTimeKind.Utc);

The myDate.Kind property is readonly, so it cannot be changed after the constructor is called.

-4
votes

The simpliest way to understand it is that DateTime is a struct. When you initialize a struct it's initialize to it's minimum value : DateTime.Min

Therefore there is no difference between default(DateTime) and new DateTime() and DateTime.Min