当我通过
将对象转换为int时(int)object
然后当对象值为0时,他会给我一个特定演员无效的错误。
当我通过
将对象转换为int时convert.toint32(object)
然后他工作并给我0意味着施法是有效的。
我想知道两者之间有什么区别。
1. (int)object
2.convert.toint32(object)
答案 0 :(得分:12)
(int)
仅 。例如,(int) "12"
会为您提供无效的强制转换异常。
Convert.ToInt32
尝试将您提供的任何内容转换为整数。所以Convert.ToInt32("12")
将返回12.确切地说,如果对象实现了IConvertible(System.String做了),那么Convert.ToInt32
将调用IConvertible.ToInt32方法。
答案 1 :(得分:3)
两种方法都完全不同。第一个是 casting
,第二个是 conversion
。
Conversion
值需要转换为int时,使用 non-integer
。
Casting
用于将实例unbox
返回int
,当实例已经是int
的{{1}}类型的Object
输入。
答案 2 :(得分:3)
在一般意义上,(Type)val
可以表示:
Nullable<T>
除外] 如果object
值为(int)object
,则int
会假设它是取消装箱操作,因此仅当对象 时才会生效float
(或盒装的枚举)。如果对象值实际上是一个字符串或一个盒装的Convert.ToInt32
等等,它将会失败。
int.Parse
的工作方式不同;它运行了许多测试,试图将诸如浮动(上面介绍)和解析字符串(映射到{{1}})之类的东西组合在一起。
答案 3 :(得分:2)
(int) something
有两种情况可供使用:
something
是一个装入对象的int,我们使用该调用将其取消装箱。如果将int放入ArrayList或HttpSession等中会发生这种情况......
something
不是一个int,但它的类型可以显式转换为int,例如,内置类型的short,long,float,或实现显式强制转换操作符的类型。
Convert.ToInt32
只是调用something
的类型IConvertible.ToInt32方法,它或多或少等同于int.Parse(something)
答案 4 :(得分:1)
有很多方法可以转换为int,很大程度上取决于你的来源。
要记住的最重要的事情是错误检查,这些方法都不是单独的傻瓜证明,因此您需要决定如何接近它们。
使用(int)转换,使用Convert.ToInt32()转换,使用int.Parse()进行解析都可以生成异常,例如InvalidCastException,FormatException和OverflowException,并且应该使用try / catch来处理失败的结果。
如果解析成功,则使用int.TryParse()解析将返回true / false结果,如果成功,则将值设置为函数调用中给出的out参数。
如果您真的想要获取任何对象并将其转换为int,那么最好使用Convert.ToInt32,例如:
public void TestFunction(object input)
try {
int value = Convert.ToInt32(input);
SomeOtherFunction(value);
}
catch (Exception ex) {
Console.WriteLine("Could not determine integer value");
}
}
另一种可能性是依赖于在.ToString()中产生可用值的对象,例如:
public void TestFunction(object input)
try {
int value = int.Parse(input.ToString());
SomeOtherFunction(value);
}
catch (Exception ex) {
Console.WriteLine("Could not determine integer value");
}
}