Jeśli mam DateTime, a ja:Co znajduje różnice między .ToString() i + ""
date.Year.ToString()
mam cały rok jako String. Ale także jeśli robię
date.Year + ""
różnic jest tylko to, że drugi nie robi wyjątku, jeśli nie ma Data? (Co prefeer)
Jeśli mam DateTime, a ja:Co znajduje różnice między .ToString() i + ""
date.Year.ToString()
mam cały rok jako String. Ale także jeśli robię
date.Year + ""
różnic jest tylko to, że drugi nie robi wyjątku, jeśli nie ma Data? (Co prefeer)
date.Year.ToString()
Nie będzie działać, jeśli data jest zerowa.
date.Year + ""
Działa nawet gdy rok jest pusty jako operator binarny + zastępuje wartość null pustym ciągiem znaków.
To jest to, co mówi o MSDN binarny operator + złączenie dwóch ciągów:
Operator binarny + wykonuje ciąg konkatenacji, gdy jeden lub oba operandy są typu string. Jeśli argument ciągu konkatenacji łańcuchów ma wartość NULL, zastępowany jest pusty ciąg znaków. W przeciwnym razie dowolny argument nie będący ciągiem jest konwertowany na jego reprezentację łańcuchów przez wywołanie wirtualnej metody ToString dziedziczonej z obiektu typu. Jeśli funkcja ToString zwraca wartość null, zastępowany jest pusty ciąg znaków.
Więcej informacji na temat http://msdn.microsoft.com/en-us/library/aa691375%28VS.71%29.aspx
Kiedy piszesz date.Year + ""
zostanie skompilowany jako wezwanie do string.Concat(object, object)
:
String.Concat(date.Year, "")
Wewnętrznie metoda Concat
wezwie ToString
na każdym (non-null) obiektu.
Oba podejścia rzucają NullReferenceException
, jeśli date
jest null
. Ale powiedziałeś, że date
jest typu DateTime
. DateTime
jest strukturą i nie może mieć wartości NULL.
Jeśli date
jest typu DateTime?
i chcesz powrócić pusty ciąg jeżeli data jest null następnie można użyć to:
date.HasValue ? date.Value.Year.ToString() : ""
Uhm, nie sądzę! W drugim przypadku, jeśli rok jest zerowy, nie otrzymuję żadnego błędu/wyjątku. Po prostu nie robi nic ... – markzzz
@markzzz: 'Year' nie może być pusty. Jest typu 'int'. –
Nie ma różnicy czy date.Year
nie jest null.
W drugim przykładzie metoda ToString()
jest niejawnie wywoływana na date.Year
.
'data.rok +" "' działa, nawet jeśli data jest zerowa? Naprawdę? A w jaki sposób DateTime może mieć wartość zerową? –
Co powiedział Mark, jak to jest puste? Czy nie jest to możliwe tylko wtedy, gdy zostanie uznane za zerowe? – dbasnett