2013-03-25 62 views
1

如果我有一個值D並且希望確保它是類型的日期時間,那麼以下是否有區別?Convert.ToDateTime(D)與(DateTime)相比D

  1. DateTime dtm = Convert.ToDateTime(D)
  2. DateTime dtm = (DateTime)D

1是轉換,而圖2是鑄造? (我在某些方面假定2是打火機操作?)
什麼時候應該使用1而不是2?


編輯

(問題的上下文中)

d是從在DataTable的細胞。我正在做的是找到任何單元格是日期(通過datatable.columnname),然後將ToOADate函數應用於結果,然後將其移至xl。所以,如果dr是我DataRowView然後我有以下兩種備選方案:

//Convert 
DateTime dtm; 
dtm = Convert.ToDateTime(dr[i - 1]); 
xlWorkSheet.Cells[rowCount, i].value = dtm.ToOADate(); 

//Cast 
DateTime dtm; 
dtm = (DateTime)dr[i - 1]; 
xlWorkSheet.Cells[rowCount, i].value = dtm.ToOADate(); 
+3

D是什麼類型? – Oded 2013-03-25 14:44:57

+0

@提供了一個很好的問題 - 它是一個DataTable中的單元格 - 在SQL服務器中,提取D的字段是DateTime;我將添加這個(還有一點)到OP – whytheq 2013-03-25 15:10:17

+0

@Oded添加了對問題上下文的小解釋 – whytheq 2013-03-25 15:17:12

回答

6

Convert.ToDateTime有幾個重載,將其他類型轉換爲DateTime。它應該用於將不是DateTime的實例轉換爲DateTime實例。您也可以使用DateTime.ParseDateTime.TryParse(如果您試圖解析字符串表示形式)。

(DateTime)D嘗試直接將實例投射到DateTime。如果實例在調用之前還不是DateTime,則會拋出異常。

+0

+1聽起來像是因爲'dr [i - 1]'已經是數據表中的日期時間了,我會盡可能使用快速投射 – whytheq 2013-03-25 20:26:40

1

通過使用「轉換」類,您實際上可以在不同類型之間進行轉換。例如。您可以將字符串轉換爲DateTime。 鑄造僅適用於相同類型。所以你不能將一個字符串轉換成一個Int32,因爲這會引發一個轉換異常。

關於你的例子: 如果D的內容始終是DateTime類型,那麼你應該更喜歡使用它來投射它,因爲演員陣容非常快。 如果你不知道D中的類型是什麼(可能是因爲它是Object類型的),你可能想要轉換它,因爲這比純粹的轉換更優雅,因爲這種方法允許你通過String設置DateTime日期字符串)或Int32(滴答)。

+0

+1感謝此信息Frank – whytheq 2013-03-25 20:21:58