This question already has answers here:
What is the point of Convert.ToDateTime(bool)?

(3 个回答)


7年前关闭。




查看元数据我发现了这个功能:
(在“System.Convert”类中)
    //
    // Summary:
    //     Calling this method always throws System.InvalidCastException.
    //
    // Parameters:
    //   value:
    //     The date and time value to convert.
    //
    // Returns:
    //     This conversion is not supported. No value is returned.
    //
    // Exceptions:
    //   System.InvalidCastException:
    //     This conversion is not supported.
    public static bool ToBoolean(DateTime value);

微软为什么要这样做?

最佳答案

Convert 类对于处理装箱值类型非常方便。 C# 硬性规则规定,您必须始终将其拆箱为完全相同的类型:

    object box = 42;
    long value = (long)box;  // Kaboom!

这会生成一个 InvalidCastException。非常不方便,特别是因为将 int 转换为 long 从来都不是问题。然而,在 .NET 1.x 中,在泛型可用之前,必须使拆箱高效,这非常重要。

每个值类型都实现了 IConvertable 接口(interface)。这使此代码可以解决问题:
    object box = 42;
    long value = Convert.ToInt64(box);  // No problem

虽然这看起来很合成,但真正的用例是从 dbase 读取数据。您将获得列值作为装箱值。很明显,很可能有一个 oops,其中一列是 Date 值,并且程序尝试将其读取为 bool 值。 Convert.ToBoolean(DateTime) 方法可确保您在发生这种情况时听到一声巨响。

关于c# - 为什么.NET Framework 中有这样的方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19411514/

10-13 03:16