为什么在.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为什么要这样做?
转换类对于处理盒装值类型非常方便。 硬 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);