为什么在.NET Framework中有这样的方法

本文关键字:方法 NET Framework 为什么 | 更新日期: 2023-09-27 18:35:36

查看元数据,我发现了这个函数:(在"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);

Microsoft为什么要这样做?

为什么在.NET Framework中有这样的方法

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

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

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

每个值类型都实现 IConvertable 接口。 这使得此代码可以解决问题:

    object box = 42;
    long value = Convert.ToInt64(box);  // No problem

虽然这看起来很合成,但真正的用例是从dbase读取数据。 你将获得以框内值形式出现的列值。 显然,很有可能出现一个糟糕的情况,其中一列是日期值,程序尝试将其读取为布尔值。 Convert.ToBoolean(DateTime)方法确保当这种情况发生时你会得到一个响亮的爆炸。

根据MSDN,Convert.ToBoolean(DateTime)保留供将来使用。

他们很可能已将其添加到其中,以防止在实施此功能时出现向后兼容性问题。 但是,将日期时间转换为布尔值意味着什么,完全超出了我的范围。

这是静态转换类的一部分。 毫无疑问,它与提供的其他方法对称:有一个Convert.ToDateTime可以将内容转换为 DateTimes,并且有一个Convert.ToSTring乐于将 DateTimes 转换为字符串。 不是将每个转换方法定义为仅采用它理解的参数,而是每个方法都有一组通用的重载,其中一些只是存根。

因为Microsoft的某个人决定System.Convert需要一种方法来与每个基元类型进行转换,而不管转换是否可能。

请注意,有几种方法如下所示:

Convert.ToDateTime(Boolean value)
Convert.ToBoolean(Char value)

以及大多数ToChar方法。

所以这会抛出一个错误链接:

    DateTime actualdate;
    bool canNotConvert = Convert.ToBoolean(actualdate);