C# System.Convert.ToDouble vs(双精度)

C# System.Convert.ToDouble vs(双精度),c#,casting,type-conversion,C#,Casting,Type Conversion,当我使用(double)value遇到异常错误时,我感到很惊讶,将其更改为System.Convert.ToDouble(value) 该值为对象类型 谁能告诉我为什么 我在此附上代码和错误消息: public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return (double)value * (double)p

当我使用
(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.

如果装箱的值不是double,则尝试在一个操作中取消装箱并强制转换,您将收到一个异常:

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

double asDouble = (double)val; // This will raise an exception
int value = 42;
object val = value; // Box

double asDouble = Convert.ToDouble(val); // This will work fine.
关于细节,我建议阅读Eric Lippert的文章,其中详细讨论了这一点

但是,将检查类型并处理此情况,然后将结果整数值转换为double,无异常:

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

double asDouble = (double)val; // This will raise an exception
int value = 42;
object val = value; // Box

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

这是通过检查对象是否实现,如果是(
Int32
实现),则使用,然后再使用实现来实现。请提供您的代码示例。我的感觉可能重复,这是因为您正在使用隐式转换,但为了得到正确的答案,请您发布一个代码示例,并告诉我们您遇到了什么异常情况?C#明确不支持将非双精度对双精度的装箱值拆箱。它确实在VB.NET中工作。这个限制是一个大问题,它允许更高效的代码,因为不需要寻找转换值的方法。在.NET1.x中,在泛型之前,这一点非常重要