Convert.ToDateTime(bool)的意义是什么?

20

昨晚我在为我正在工作的系统编写一些类型转换例程。其中一个转换涉及将字符串值转换为它们的DateTime等效项。

在此过程中,我注意到Convert.ToDateTime()方法有一个重载,可以接受一个布尔参数。

第一个问题?在什么情况下,这可能有用?

我进一步尝试通过QuickWatch执行该方法。无论如何(true或false),例程都会返回InvalidCastException。

第二个问题?为什么会有这个方法?

编辑

谢谢大家的答案。从合同的角度来看,我可以理解其合理性,但似乎核心框架包括永远不起作用的方法是很奇怪的:

  • 永远不能工作
  • 更糟的是,当有人试图调用它时,实际上会抛出异常。

这有点像有人制造了一辆充满控制的汽车,当使用时会主动阻止您的车辆运行。


3
不仅“停止工作”,实际上要使其崩溃 :-) - Stefan Steinegger
1
Eric Lippert对BCL团队的这项工作不会感到太自豪。据他所说,每个功能默认情况下都没有实现,只有在需要、成本和需求的情况下才会实现。显然,BCL中有人太富有了 :) 对客户来说实际上没有什么用处... - nawfal
3个回答

6

这是有道理的,因为ToDateTime是由bool实现的IConvertible接口的一部分。如果你在反射器中查看,你会发现它会抛出一个InvalidCastException异常。

更新(来自Convert):

public static DateTime ToDateTime(bool value)
{
    return ((IConvertible) value).ToDateTime(null);
}

3
但是:这是一个静态方法,不能成为接口的一部分。因此,这根本不合逻辑。 - Stefan Steinegger
3
仍然:实现一个不应该调用的静态方法是没有意义的。编译器会将静态方法静态绑定,这里没有任何动态性,并且这个方法没有用处。 - Stefan Steinegger
@Stefan Steinegger 我认为这是有意义的。将Contains转换为方便方法,以调用所有实现IConvertible接口的类型上的所有转换。从API设计的角度来看,如果它被省略掉,我认为它会更奇怪(或者至少同样奇怪)。 - Klaus Byskov Pedersen

4

我认为这是为了完整性,当使用bool类型的对象调用Convert.ToDateTime时,会明确抛出InvalidCastException异常。

如果您查看Convert的所有成员,您会发现包括了重载来接受所有基本类型的转换到其他基本类型,当没有合适的转换时,会抛出InvalidCastException异常。

我想他们认为这比根本没有提供重载更有意义。


3
我认为这是唯一的解释。想法是让它完整,但实际上它没有什么用处。 - Stefan Steinegger

3
如果你仔细看,大多数的过载都是无效的,并会抛出InvalidCastException
它必须实现所有转换,因为它实现了IConvertible,这是唯一正确的方法。

4
这些是静态方法,它们没有实现任何接口。因此问题仍然存在:为什么会有这些方法? - Stefan Steinegger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接