8

当我遇到的异常错误(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.
4

1 回答 1

24

如果你装箱了一个不是双精度的值,然后尝试在一个操作中取消装箱并强制转换,你将收到一个异常:

int value = 42;
object val = value; // Box

double asDouble = (double)val; // This will raise an exception

有关详细信息,我建议阅读 Eric Lippert 的文章Representation and Identity,其中详细讨论了这一点。

但是,Convert.ToDouble将检查类型,并处理这种情况,然后将生成的整数值转换为双精度值,无一例外:

int value = 42;
object val = value; // Box

double asDouble = Convert.ToDouble(val); // This will work fine.

这通过检查对象是否实现IConvertible来工作,如果是(Int32实现),则使用 using IConvertible.ToDouble,而后者又使用Int32 的 ToDouble实现。

于 2013-06-10T23:56:43.027 回答