我昨晚正在为我正在进行的系统做一些类型转换例程。其中一个转换涉及将字符串值转换为DateTime等效值。
执行此操作时,我注意到Convert.ToDateTime()方法有一个接受布尔参数的重载。
第一个问题?在什么情况下这可能有用?
我进一步尝试在QuickWatch中执行该方法。无论哪种方式(true或false),例程都返回InvalidCastException。
第二个问题?为什么这种方法在这里呢?
修改
谢谢你的回答,伙计们。从合同的角度来看,我可以看到有意义,但核心框架包括以下方法似乎很奇怪: -
这有点像制造一辆装有控制装置的汽车,可以在使用时主动阻止您的车辆工作。
答案 0 :(得分:6)
这是有道理的,因为ToDateTime
是IConvertible
实现的bool
界面的一部分。如果您查看反射器,您会看到它抛出InvalidCastException
。
更新(来自Convert
):
public static DateTime ToDateTime(bool value)
{
return ((IConvertible) value).ToDateTime(null);
}
答案 1 :(得分:4)
我认为这是完整性的,并且在使用bool对象调用Convert.ToDateTime时会出现明确的InvalidCastException。
如果查看Convert的所有成员,您可以看到已包含重载以接受转换到每个其他基本类型的所有基本类型,并且在没有合理转换时抛出InvalidCastExceptions。
我猜他们认为这比没有那里的重载更有意义。
答案 2 :(得分:3)
如果仔细观察,重载的most无效,会抛出InvalidCastException
。
它必须实现所有的强制转换,因为它实现了IConvertible
,这是正确执行此操作的唯一方法。