2016-05-16 82 views
2

我試圖datetime格式到的形式爲「C」的字符串,通過使用ToString方法:否ToString重載方法需要兩個參數

string end = evt.End.DateTime.ToString("c", DataController.culture); 

DataController.culture是一個有效的參考文化對象和evt是來自Google日曆v3 API的Event對象。我相信DateTime是DatetTime類的,因爲調試器在對象類型中這樣說。

但是我不斷收到標題中提到的問題,爲什麼?即使是MSDN docs展示瞭如何使用這種方法,但不知何故,我不能:

Console.WriteLine(date1.ToString("d MMMM", 
        CultureInfo.CreateSpecificCulture("es-MX"))); 
// Displays 29 agosto  
+2

將代碼更改爲'evt.End.DateTime.GetType()。FullName'。什麼是您認爲是DateTime的類型的全名? –

+0

在查看這些虛擬文檔時,這會導致我相信在訪問https://developers.google.com/resources/api-library/documentation/calendar/v3/csharp時它們可能實際上是不同類型的文檔/latest/classGoogle_1_1Apis_1_1Calendar_1_1v3_1_1Data_1_1EventDateTime.html – mckeejm

+0

我沒有考慮過該類型可能爲空;傻我。這將解釋觀察到的行爲,並且我建議的測試 - 打印運行時類型 - 在典型情況下不會指出問題。 (因爲GetType()會崩潰,如果值爲null,或者返回typeof(DateTime),如果它不是)。 –

回答

5

API documentation表明您試圖ToString()財產實際上是一個System.Nullable<DateTime>是,它具有從正常DateTime不同的可用性方面的考慮。爲了調用ToString方法,你願意的話,你需要檢索從提供給您可空一個具體DateTime結構 - 在你的情況下,通過執行以下操作:

string end = evt.End.DateTime.Value.ToString("c", DataController.culture); 

你要知道,你通常會想首先通過在調用ToString()或任何其他方法或屬性之前檢查HasValue屬性來檢查您的可空對象(例如evt.End.DateTime)實際上是否具有值。

+0

漂亮!我注意到,在C#6中,您還可以使用可空的成員訪問運算符來優雅地解決問題。 –

+0

我實際上已經嘗試過(不知道Nullable對象的任何內容),並且因爲IDE提示Value作爲屬性,但是我得到了「操作不允許」錯誤或這些行之間的錯誤,是否因爲對象在運行時爲空?我必須安全地檢查某些東西嗎?再次,我是C#的新手。 – arielnmz

+0

一般而言,如果對象確實爲null,則會拋出'NullReferenceException'。您能否使用拋出您所描述錯誤的代碼更新您的問題? –

相關問題