为什么Convert.ToXXX可以工作,而强制转换会抛出异常?

时间:2015-06-18 00:50:05

标签: c# exception types casting

我的代码如下:

class Program
{
    private static void Main()
    {
        object obj = 1;
        Console.WriteLine(Convert.ToDouble(obj)); // why OK without exception?
        var d = (double) obj; // why exception?
    }
}

“Convert.ToDouble(obj)”用于将int转换为double,但“var d =(double)obj”将抛出异常。为什么会有这样的差异?这两种类型的转换有什么区别?

3 个答案:

答案 0 :(得分:2)

对于强制转换,对象需要是应该转换为的类型。 在你的例子中是一个整数。

工作双重演员将是:

object obj = 1d;
var t = (double)obj;

答案 1 :(得分:0)

您不必跳过多重演员箍,简单的值类型实现IConvertible接口。您使用Convert类调用的。 所以基本上你的对象包含一个int值,你不能使用类型转换将它直接转换为十进制。但你仍然可以使用:

var d = (int)obj

您可以使用转换界面跳转多个演员表。

答案 2 :(得分:0)

参考这个问题:
Difference between casting and using the Convert.To() method
@Servy的答案是一个很好的解释。