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
.
DateTime.MinValue
, so you could also just do DateTime myDate = DateTime.MinValue
as well :/
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.
No, they are identical.
default()
, for any value type (DateTime
is a value type) will always call the parameterless constructor.
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))
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.
DateTime
is useful as a a value-not-set value, with a simple comparison to default(DateTime)
. What use is a non-default 01/01/0001
value?
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
Success story sharing
new
to differ from whatdefault(T)
will do.default(DateTime)
is more descriptive of the programmer's intent, therefore more favorable usually.new DateTime()
does mean "call the parameterless constructor", even if the MS CLR implements it radically differently than it does for a constructor with parameters, and if the runtime happens to not actually have a parameterless constructor for that type for that reason.