【发布时间】:2014-10-14 08:59:55
【问题描述】:
Convert.ToInt32(DateTime) 方法被记录为始终抛出 InvalidCastException,因为“不支持此转换。”
如果它不受支持,为什么它甚至存在?没有那个功能不是更有意义吗?
【问题讨论】:
-
这个问题无法真正回答(除非 BCL 团队的成员愿意启发我们所有人)。否则,这实际上只是关于 API 设计的意见。
-
FWIW,DateTime 是 IConvertible 并且有 IConvertible.ToInt32。我想这就是问题的“根源”来自哪里。这实际上使它更加一致,这样
Converter.ToInt32((object)dt)(对象被视为 IConvertible)将产生相同的异常。 -
ILSpy 显示:
public static int ToInt32(DateTime value) { return ((IConvertible)value).ToInt32(null); } -
DateTime实现的所有IConvertible方法似乎都抛出了异常(ToDateTime方法除外)。至少Int32和Int64的IConvertible实现似乎也为IConvertible.ToDateTime抛出异常。所以一个相关的问题可能是“为什么 DateTime 实现 IConvertible,什么时候它不会转换成任何东西,什么都不会转换成它?” -
@pmcoltrane
string将转换为DateTime反之亦然,所以不是“无”;-)