System.Convert.ToDouble vs (double)
本文关键字:double vs Convert ToDouble System | 更新日期: 2023-09-27 18:17:52
当我使用(double)value
通过将其更改为System.Convert.ToDouble(value)
来修复异常错误时,我感到惊讶。
值为对象类型。
谁能告诉我为什么?
在这里,我附上代码和错误消息:
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return (double)value * (double)parameter;
}
Error Message: System.InvalidCastException: Specified cast is not valid.
如果您已将不是双精度值的值装箱,然后尝试在一个操作中取消装箱和强制转换,您将收到异常:
int value = 42;
object val = value; // Box
double asDouble = (double)val; // This will raise an exception
有关详细信息,我建议您阅读Eric Lippert的文章Representationand Identity,其中详细讨论了这个问题。
但是,Convert.ToDouble 将检查类型并处理这种情况,然后将生成的整数值转换为双精度值,而不会出现异常:
int value = 42;
object val = value; // Box
double asDouble = Convert.ToDouble(val); // This will work fine.
这通过检查对象是否实现 IConvertible 来工作,如果是(Int32
实现(,则使用 IConvertible.ToDouble
,而 又使用 Int32 的 ToDouble 实现。