我的代码如下:
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”将抛出异常。为什么会有这样的差异?这两种类型的转换有什么区别?
答案 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的答案是一个很好的解释。