This question already has answers here:
What is the point of Convert.ToDateTime(bool)?
(3 个回答)
7年前关闭。
查看元数据我发现了这个功能:
(在“System.Convert”类中)
微软为什么要这样做?
这会生成一个 InvalidCastException。非常不方便,特别是因为将 int 转换为 long 从来都不是问题。然而,在 .NET 1.x 中,在泛型可用之前,必须使拆箱高效,这非常重要。
每个值类型都实现了 IConvertable 接口(interface)。这使此代码可以解决问题:
虽然这看起来很合成,但真正的用例是从 dbase 读取数据。您将获得列值作为装箱值。很明显,很可能有一个 oops,其中一列是 Date 值,并且程序尝试将其读取为 bool 值。 Convert.ToBoolean(DateTime) 方法可确保您在发生这种情况时听到一声巨响。
(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