Czy jest jakiś powód, aby wybrać jedną z nich drugą?new DateTime() vs domyślnie (DateTime)
DateTime myDate = new DateTime();
lub
DateTime myDate = default(DateTime);
Obaj są równe 1/1/0001 12:00:00 AM
.
Czy jest jakiś powód, aby wybrać jedną z nich drugą?new DateTime() vs domyślnie (DateTime)
DateTime myDate = new DateTime();
lub
DateTime myDate = default(DateTime);
Obaj są równe 1/1/0001 12:00:00 AM
.
Nie, są identyczne.
default()
, dla każdego rodzaju wartości (DateTime
jest typem wartości) będzie zawsze wywoływał konstruktor bez parametrów.
FWIW; W języku C# 6 to zachowanie się zmieni. C# 6 wprowadza [konstruktory bez parametrów] (https://roslyn.codeplex.com/discussions/562559) dla struktur, które pozwalają na zachowanie 'nowego' różnić się od tego, co zrobi' default (T) '. – vcsjones
Można argumentować, że 'default (DateTime)' jest bardziej opisowy dla intencji programisty, dlatego zazwyczaj jest bardziej korzystny. –
@vcsjones to zostało usunięte przed ostatecznym wydaniem C# 6.0 jednak. – nawfal
Odpowiedź brzmi: nie. Należy pamiętać, że w obu przypadkach, mdDate.Kind = DateTimeKind.Unspecified
.
Dlatego może lepiej byłoby wykonać następujące czynności:
DateTime myDate = new DateTime(1, 1, 1, 0, 0, 0, DateTimeKind.Utc);
Obiekt myDate.Kind
jest tylko do odczytu, więc nie można zmienić po konstruktor nazywa.
jak to odpowiada na pytanie OP? –
Proszę zobaczyć pierwsze 4 słowa z mojej odpowiedzi. –
Sprzeciwiłbym się temu. Domyślna wartość "DateTime" jest przydatna jako wartość nie-ustawiona, z prostym porównaniem do 'default (DateTime)'. Jaki jest pożytek z innej niż domyślna wartości "01/01/0001"? – Rawling
Jeśli chcesz użyć wartości domyślnej dla parametru DateTime w metodzie, możesz użyć tylko wartości domyślnej (DateTime).
Poniższy wiersz nie zostanie skompilowany:
private void MyMethod(DateTime syncedTime = DateTime.MinValue)
Linia ta zostanie skompilowany:
private void MyMethod(DateTime syncedTime = default(DateTime))
To była odpowiedź, której szukałem. Dzięki! – GigaKatowice
Oczywiście DateTime.MinValue nie kompiluje? Opcjonalne parametry muszą być stałymi w czasie kompilacji, których MinValue nie jest. domyślne (DateTime) i new DateTime() są prawidłowe. (co jest zabawne, ponieważ const DateTime x = default (DateTime) jest nieprawidłowe, ponieważ wartości DateTime nie mogą być zadeklarowane jako stałe w czasie kompilacji) –
która jest równa 'DateTime.MinValue', więc można też po prostu zrobić' DateTime MyDate = DateTime .MinValue' również:/ – Lloyd
@Lloyd Przez większość czasu ... ale nie jako domyślny parametr DateTime.MinValue nie jest stałą czasu kompilacji - ale domyślną (DateTime)/new DateTime() jest. – Ricibob
Tylko dla wyjaśnienia doskonałego komentarza @ Ricibob, ponieważ jest to ważne: jeśli tworzysz metodę z opcjonalnym parametrem, możesz użyć TYLKO 'default (DateTime)' lub 'new DateTime()'. Są to * * stałe kompilacji *, wymagane dla opcjonalnych wartości parametrów. Jeśli stałe czasowe kompilacji nie są wymagane, wówczas 'default (DateTime)', 'new DateTime()' oraz 'DateTime.MinValue' są wymienne. – leanne