2011-12-07 6 views

Odpowiedz

4
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

+0

'data.rok +" "' działa, nawet jeśli data jest zerowa? Naprawdę? A w jaki sposób DateTime może mieć wartość zerową? –

+2

Co powiedział Mark, jak to jest puste? Czy nie jest to możliwe tylko wtedy, gdy zostanie uznane za zerowe? – dbasnett

10

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() : "" 
+0

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

+1

@markzzz: 'Year' nie może być pusty. Jest typu 'int'. –

3

Nie ma różnicy czy date.Year nie jest null.

W drugim przykładzie metoda ToString() jest niejawnie wywoływana na date.Year.

Powiązane problemy