1

如果我有一个值D并且想确保它是 datetime 类型,那么以下之间有区别吗?

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

1 是转换,而 2 是强制转换?(我假设在某些方面 2 是一个更轻的操作?)
我什么时候应该使用 1 而不是 2?


编辑

(问题的背景)

D来自 a 中的一个单元格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();
4

2 回答 2

6

Convert.ToDateTime有几个重载可以将其他类型转换为DateTime. 当您将不是 DateTime 的实例转换为 DateTime 实例时,应该使用它。您也可以使用DateTime.Parseand DateTime.TryParse(如果您尝试解析字符串表示形式)。

(DateTime)D尝试直接将实例转换为DateTime. 如果实例在调用之前还不是DateTime,则会引发异常。

于 2013-03-25T14:45:51.977 回答
1

通过使用“Convert”类,您实际上可以在不同类型之间进行转换。例如,您可以将字符串转换为日期时间。铸造只适用于相同的类型。因此,您不能将 String 转换为 Int32,因为这会引发转换异常。

关于您的示例:如果 D 的内容始终是 DateTime 类型,那么您应该更喜欢转换它,因为转换非常快。如果您不知道 D 中的类型是什么(可能是因为它是 Object 类型),您可能希望转换它,因为这比普通转换更优雅,因为此方法允许您也通过 String 设置 DateTime(Date字符串)或 Int32(刻度)。

于 2013-03-25T15:20:01.117 回答