2011-12-07 30 views
5

的差異+」如果我有一個DateTime,和我做的:什麼的ToString()和「

date.Year.ToString() 

我拿到年終爲String。但如果我也

date.Year + "" 

區別只是,第二個不會得到一個例外,如果沒有日期? (我prefeer)

回答

4
date.Year.ToString() 

如果日期爲空,則不起作用。

date.Year + "" 

即使年份爲空,作爲二元運算符+運算符將null替換爲空字符串也可以工作。

這是MSDN說,關於二元+運算符來連接兩個字符串:

二元+運算符執行字符串連接時,一個或兩個操作數爲string類型。如果字符串連接的操作數爲空,則替換空字符串。否則,通過調用從object類型繼承的虛擬ToString方法,將任何非字符串參數轉換爲其字符串表示形式。如果ToString返回null,則替換空字符串。

關於http://msdn.microsoft.com/en-us/library/aa691375%28VS.71%29.aspx的更多信息

+0

'date.Year +「」'即使日期爲空也能工作嗎?真?如何將DateTime放在第一位? –

+2

馬克說什麼,它是如何爲零?如果它被宣佈爲可空的,這不僅是可能的嗎? – dbasnett

10

當編寫date.Year + ""它將被編譯爲一個呼叫到string.Concat(object, object)

String.Concat(date.Year, "") 

在內部,Concat方法將調用每個(非空)對象上ToString

如果datenull,則兩種方法都會拋出NullReferenceException。但你說dateDateTime的類型。 DateTime是一個結構,因此不能爲空。


如果dateDateTime?類型,並希望返回一個空字符串,如果日期爲null,則你可以使用這個:

date.HasValue ? date.Value.Year.ToString() : "" 
+0

呃,我不這麼認爲!在第二種情況下,如果年份爲空,則不會收到任何錯誤/異常。只是,它不會做任何事情... – markzzz

+1

@markzzz:'Year'不能爲空。它是'int'類型。 –

3

沒有區別,如果date.Year不爲空。

在第二個示例中,ToString()方法在date.Year上隱式調用。

相關問題