我一直认为在C#中转换和转化基本上是相同的:从一个数据类型到另一个数据类型的两种不同方式。然而,显然这是不正确的,因为它们经常会输出不同的结果。
Convert.ToInt32(1.6) //outputs 2
(Int32)1.6 //outputs 1
(DateTime)("10/29/2013") //won't compile - cannot convert type 'string' to type 'system.date.time'
Convert.ToDateTime("10/29/2013") //outputs 10/29/2013 12:00:00 AM
- 我的问题是这两个方法的主要区别是什么,为什么它们返回不同的结果?
- 在什么情况下使用其中一个方法比另一个更加合适?
个人认为使用Convert.To
方法更加简洁明了。我知道它还会抛出System.InvalidCastException
异常。有没有人能够提供一个简单明了的解释呢?
Convert
在转换时会进行一些“魔法”操作。它会分析源类型的值并应用转换来创建目标类型的新实例。强制转换发生在较低级别,您只能将相关类型进行强制转换(例如将浮点数转换为整数)。 - knittl