swc*_*aft 5 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)parameter;
}
Error Message: System.InvalidCastException: Specified cast is not valid.
Run Code Online (Sandbox Code Playgroud)
Ree*_*sey 18
如果您已经装箱了一个不是双倍的值,那么尝试在一次操作中取消装箱并投射,您将收到一个例外:
int value = 42;
object val = value; // Box
double asDouble = (double)val; // This will raise an exception
Run Code Online (Sandbox Code Playgroud)
有关详细信息,我建议阅读Eric Lippert的文章" 表示和身份",其中详细讨论了这一点.
但是,Convert.ToDouble将检查类型,并处理这种情况,然后将得到的整数值转换为double,没有异常:
int value = 42;
object val = value; // Box
double asDouble = Convert.ToDouble(val); // This will work fine.
Run Code Online (Sandbox Code Playgroud)
这是通过检查对象是否实现IConvertible,以及如果是(doInt32),使用IConvertible.ToDouble,然后使用Int32的ToDouble实现.