今天在工作中突然出现了一个关于如何将对象转换为其特定类型( int
)的问题,我说要转换它:
int i = (int)object;
一位同事说要用Convert.ToInt32()
。
int i = Convert.ToInt32(object)
Convert.ToInt32()
和直接对象转换有什么不同?
发布于 2011-02-10 00:25:01
并不是每个对象都可以直接转换为int
。例如,以下代码将无法编译:
string s = "1";
int i = (int)s;
因为string
不能隐式转换为int
。
然而,这是合法的:
string s = "1";
int i = Convert.ToInt32(s);
顺便说一下,如果输入对象无法转换,则强制转换和Convert
都会抛出异常。但是,如果失败,int.TryParse
不会抛出异常;相反,它返回false (但它只接受一个字符串,因此在使用输入对象之前必须对其执行.ToString()
操作):
object s = "1";
int i;
if(int.TryParse(s.ToString(), out i))
{
// i now has a value of 1
}
发布于 2011-02-10 00:26:12
它们从根本上是不同的
强制转换表示该对象是被强制转换到的类型的实例,所以请强制转换它。
Convert表示要转换的类型之间存在转换。
例如,您不能将字符串转换为int类型,但可以将其转换为int类型。由于原语类型的某些内置强制转换规则,或者可以添加到您自己的类型中的显式强制转换,因此存在一些灰色区域/重叠。但一般来说,我不会认为这两个是等同的。
鉴于没有“更好”的选项,您应该使用在给定上下文中有意义的选项。
发布于 2011-02-10 00:25:05
仅当原始类型为新类型定义了强制转换时,才能进行强制转换。因此,从一种数值类型转换为另一种数值类型(例如,long到int)通常是可能的,但从非数值类型转换为数值类型(例如,string到int)通常是不可能的。Convert提供了更多的方法来将这些非数字类型更改为数字类型,所以使用它的原因是您不太可能得到错误。
https://stackoverflow.com/questions/4947562
复制相似问题