Co jest równe DateTime.MinValue, więc możesz również zrobić DateTime myDate = DateTime.MinValuerównież: /
Lloyd
20
@Lloyd Przez większość czasu ... ale nie jako domyślny parametr DateTime.MinValue nie jest stałą czasową kompilacji - ale domyślną (DateTime) / new DateTime () jest.
Ricibob
12
Aby wyjaśnić doskonały komentarz @ Ricibob, ponieważ jest to ważne: jeśli tworzysz metodę z opcjonalnym parametrem, możesz WYŁĄCZNIE użyć jednego default(DateTime)lub new DateTime(). Są to obie stałe czasowe kompilacji , wymagane dla opcjonalnych wartości parametrów. Jeśli nie są wymagane kompilacji stałe czasowe, a następnie default(DateTime), new DateTime()i DateTime.MinValuesą wymienne.
leanne
Odpowiedzi:
200
Nie, są identyczne.
default(), dla dowolnego typu wartości ( DateTimejest typem wartości) zawsze wywołuje konstruktora bez parametrów.
FWIW; W C # 6 to zachowanie się zmieni. C # 6 wprowadza konstruktory bez parametrów dla struktur, które pozwalają na zachowanie newsię odbiegające od tego default(T), co zrobi.
vcsjones
30
Można argumentować, że default(DateTime)jest to bardziej opisowe zamiary programisty, a zatem zazwyczaj bardziej korzystne.
intrepidis,
16
@vcsjones zostało to jednak usunięte przed ostatecznym wydaniem C # 6.0.
nawfal
5
@nawfal Tak. Prawdopodobnie najlepiej też.
vcsjones,
Ta odpowiedź jest po prostu niepoprawna IMO: dwie rzeczy są semantycznie identyczne, ale żadna z nich nie wywołuje konstruktora - wykorzystują obie opcje składniinitobj
Marc Gravell
22
Jeśli chcesz użyć wartości domyślnej parametru DateTime w metodzie, możesz użyć tylko wartości domyślnej (DateTime).
Oczywiście DateTime.MinValue się nie kompiluje? Parametry opcjonalne muszą być stałymi czasu kompilacji, których nie ma w MinValue. zarówno default (DateTime), jak i new DateTime () są jednak prawidłowe. (co jest zabawne, ponieważ const DateTime x = default (DateTime) jest niepoprawny, ponieważ wartości DateTime nie można zadeklarować jako stałych czasu kompilacji)
Jerri Kangasniemi
16
Odpowiedź brzmi nie. Pamiętaj, że w obu przypadkachmdDate.Kind = DateTimeKind.Unspecified .
Dlatego może być lepiej wykonać następujące czynności:
Sprzeciwiłbym się temu. Wartość domyślna DateTimejest przydatna jako wartość nieokreślona, z prostym porównaniem z default(DateTime). Jakie zastosowanie ma wartość inna niż domyślna 01/01/0001?
Rawling,
Pamiętaj, że to DateTimeKind.Utc zamiast DateTimeKind.UTC
Roberto
@Roberto Dzięki, naprawiono.
jpaugh
-3
Najprostszym sposobem na zrozumienie tego jest to, że DateTime jest strukturą. Kiedy inicjujesz strukturę, inicjuje się do jej minimalnej wartości:DateTime.Min
Dlatego nie ma żadnej różnicy pomiędzy default(DateTime)a new DateTime()iDateTime.Min
Nie, struktury są nie koniecznie inicjowany do wartości minimalnej. Są one inicjowane tak, aby wszystkie bity miały wartość zero. W przypadku niektórych typów jest to ich najniższa wartość, w przypadku innych, takich jak typy liczbowe, które mogą być ujemne, to nie jest blisko ich minimalnej wartości. I oczywiście inne nadal nie będą porównywalne i nie będą miały wartości „minimalnej”.
DateTime.MinValue
, więc możesz również zrobićDateTime myDate = DateTime.MinValue
również: /default(DateTime)
lubnew DateTime()
. Są to obie stałe czasowe kompilacji , wymagane dla opcjonalnych wartości parametrów. Jeśli nie są wymagane kompilacji stałe czasowe, a następniedefault(DateTime)
,new DateTime()
iDateTime.MinValue
są wymienne.Odpowiedzi:
Nie, są identyczne.
default()
, dla dowolnego typu wartości (DateTime
jest typem wartości) zawsze wywołuje konstruktora bez parametrów.źródło
new
się odbiegające od tegodefault(T)
, co zrobi.default(DateTime)
jest to bardziej opisowe zamiary programisty, a zatem zazwyczaj bardziej korzystne.initobj
Jeśli chcesz użyć wartości domyślnej parametru DateTime w metodzie, możesz użyć tylko wartości domyślnej (DateTime).
Następujący wiersz nie zostanie skompilowany:
Ta linia skompiluje:
źródło
Odpowiedź brzmi nie. Pamiętaj, że w obu przypadkach
mdDate.Kind = DateTimeKind.Unspecified
.Dlatego może być lepiej wykonać następujące czynności:
myDate.Kind
Właściwość jest tylko do odczytu, więc nie można zmienić po konstruktor nazywa.źródło
DateTime
jest przydatna jako wartość nieokreślona, z prostym porównaniem zdefault(DateTime)
. Jakie zastosowanie ma wartość inna niż domyślna01/01/0001
?Najprostszym sposobem na zrozumienie tego jest to, że DateTime jest strukturą. Kiedy inicjujesz strukturę, inicjuje się do jej minimalnej wartości:
DateTime.Min
Dlatego nie ma żadnej różnicy pomiędzy
default(DateTime)
anew DateTime()
iDateTime.Min
źródło