Was gleich ist DateTime.MinValue, also könnten Sie auch genauso gut tun DateTime myDate = DateTime.MinValue: /
Lloyd
20
@Lloyd Meistens ... aber nicht als Standardparameter DateTime.MinValue ist keine Kompilierungszeitkonstante - aber Standard (DateTime) / new DateTime ().
Ricibob
12
Nur um den hervorragenden Kommentar von @ Ricibob zu verdeutlichen, denn es ist wichtig: Wenn Sie eine Methode mit einem optionalen Parameter erstellen, können Sie NUR entweder default(DateTime)oder verwenden new DateTime(). Dies sind beide Kompilierungszeitkonstanten , die für optionale Parameterwerte erforderlich sind. Wenn keine Kompilierungszeitkonstanten erforderlich default(DateTime)sind new DateTime(), DateTime.MinValuesind sie austauschbar.
Leanne
Antworten:
200
Nein, sie sind identisch.
default(), DateTimeruft für jeden Werttyp ( ist ein Werttyp) immer den parameterlosen Konstruktor auf.
FWIW; In C # 6 ändert sich dieses Verhalten. C # 6 führt parameterlose Konstruktoren für Strukturen ein, mit denen sich das Verhalten von von newdem unterscheiden kann, was zu default(T)tun ist.
vcsjones
30
Man könnte argumentieren, dass dies default(DateTime)die Absicht des Programmierers besser beschreibt und daher normalerweise günstiger ist.
Intrepidis
16
@vcsjones Dies wurde jedoch vor der endgültigen Veröffentlichung von C # 6.0 entfernt.
Nawfal
5
@nawfal Ja. Wahrscheinlich das Beste, was es auch tat.
vcsjones
Diese Antwort ist einfach falsch, IMO: Die beiden Dinge sind semantisch identisch, aber keiner von beiden ruft einen Konstruktor auf - beide initobj
Syntaxoptionen
22
Wenn Sie den Standardwert für einen DateTime-Parameter in einer Methode verwenden möchten, können Sie nur den Standardwert (DateTime) verwenden.
Natürlich wird DateTime.MinValue nicht kompiliert? Optionale Parameter müssen Konstanten zur Kompilierungszeit sein, MinValue jedoch nicht. default (DateTime) und new DateTime () sind beide gültig (was eigentlich lustig ist, da const DateTime x = default (DateTime) nicht gültig ist, da DateTime-Werte nicht als Konstanten zur Kompilierungszeit deklariert werden können)
Jerri Kangasniemi,
16
Die Antwort ist nein. Denken Sie daran, dass in beiden Fällen , mdDate.Kind = DateTimeKind.Unspecified.
Daher ist es möglicherweise besser, Folgendes zu tun:
Bitte sehen Sie die ersten 4 Wörter meiner Antwort.
Ben C
4
Ich würde dagegen argumentieren. Die Standardeinstellung DateTimeist nützlich als ein nicht festgelegter Wert mit einem einfachen Vergleich zu default(DateTime). Was nützt ein nicht standardmäßiger 01/01/0001Wert?
Rawling
Denken Sie daran, dass es DateTimeKind.Utc anstelle von DateTimeKind.UTC
Roberto
@ Roberto Danke, behoben.
Jpaugh
-3
Der einfachste Weg, dies zu verstehen, ist, dass DateTime eine Struktur ist. Wenn Sie eine Struktur initialisieren, wird sie auf ihren Mindestwert initialisiert:DateTime.Min
Daher gibt es keinen Unterschied zwischen default(DateTime)und new DateTime()undDateTime.Min
Nein, Strukturen werden nicht unbedingt auf ihren Mindestwert initialisiert. Sie werden so initialisiert, dass alle Bits Null sind. Bei einigen Typen ist dies der niedrigste Wert, bei anderen, z. B. bei numerischen Typen, die negativ sein können, ist dies nicht annähernd der Mindestwert. Und natürlich sind andere immer noch nicht vergleichbar und haben keinen "Mindestwert".
DateTime.MinValue
, also könnten Sie auch genauso gut tunDateTime myDate = DateTime.MinValue
: /default(DateTime)
oder verwendennew DateTime()
. Dies sind beide Kompilierungszeitkonstanten , die für optionale Parameterwerte erforderlich sind. Wenn keine Kompilierungszeitkonstanten erforderlichdefault(DateTime)
sindnew DateTime()
,DateTime.MinValue
sind sie austauschbar.Antworten:
Nein, sie sind identisch.
default()
,DateTime
ruft für jeden Werttyp ( ist ein Werttyp) immer den parameterlosen Konstruktor auf.quelle
new
dem unterscheiden kann, was zudefault(T)
tun ist.default(DateTime)
die Absicht des Programmierers besser beschreibt und daher normalerweise günstiger ist.initobj
Wenn Sie den Standardwert für einen DateTime-Parameter in einer Methode verwenden möchten, können Sie nur den Standardwert (DateTime) verwenden.
Die folgende Zeile wird nicht kompiliert:
Diese Zeile wird kompiliert:
quelle
Die Antwort ist nein. Denken Sie daran, dass in beiden Fällen ,
mdDate.Kind = DateTimeKind.Unspecified
.Daher ist es möglicherweise besser, Folgendes zu tun:
Die
myDate.Kind
Eigenschaft ist schreibgeschützt und kann daher nach dem Aufruf des Konstruktors nicht mehr geändert werden.quelle
DateTime
ist nützlich als ein nicht festgelegter Wert mit einem einfachen Vergleich zudefault(DateTime)
. Was nützt ein nicht standardmäßiger01/01/0001
Wert?Der einfachste Weg, dies zu verstehen, ist, dass DateTime eine Struktur ist. Wenn Sie eine Struktur initialisieren, wird sie auf ihren Mindestwert initialisiert:
DateTime.Min
Daher gibt es keinen Unterschied zwischen
default(DateTime)
undnew DateTime()
undDateTime.Min
quelle