代码之家  ›  专栏  ›  技术社区  ›  Paul Alan Taylor

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

  •  20
  • Paul Alan Taylor  · 技术社区  · 14 年前

    我昨晚为我正在研究的系统做了一些类型转换例程。其中一个转换涉及将字符串值转换为其日期时间等效值。

    在执行此操作时,我注意到convert.todatetime()方法有一个接受布尔参数的重载。

    第一个问题?在什么情况下这种方法有用?

    我进一步尝试在QuickWatch中执行该方法。不管是对还是错,例程都返回一个InvalidcastException。

    第二个问题?为什么这个方法还在这里?

    编辑

    谢谢你的回答,伙计们。我能看出来 有道理 从合同的角度来看,但核心框架包含以下方法似乎很奇怪:

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

    这有点像是有人在制造一辆装有控制装置的汽车,当你使用时,这些控制装置会主动阻止你的汽车工作。

    3 回复  |  直到 14 年前
        1
  •  6
  •   Klaus Byskov Pedersen    14 年前

    这是有道理的,因为 ToDateTime 是其中的一部分 IConvertible 接口实现者 bool . 如果你看反射镜,你会看到它抛出一个 InvalidCastException .

    更新 (从 Convert ):

    public static DateTime ToDateTime(bool value)
    {
        return ((IConvertible) value).ToDateTime(null);
    }
    
        2
  •  4
  •   DanK    14 年前

    我认为它是为了完整性而存在的,并且当使用bool对象调用convert.todatetime时,会得到一个显式的invalidCastException。

    如果查看convert的所有成员,可以看到已经包含了重载以接受所有基本类型以转换为其他每个基本类型,如果没有合理的转换,则会抛出invalidCastExceptions。

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

        3
  •  3
  •   Oded    14 年前

    如果你仔细看, most 的重载无效,将引发 InvalidCastException .

    必须执行 全部的 当它实施的时候 IConvertible 这是唯一正确的方法。