(int)object
当对象值为0时,会出现特定转换无效的错误提示。
我将一个对象转换为整数的方式如下:
convert.toint32(object)
然后他工作并给我0,这意味着投掷是有效的。
我想知道两者之间的区别。
1. (int)object
2.convert.toint32(object)
(int)object
当对象值为0时,会出现特定转换无效的错误提示。
我将一个对象转换为整数的方式如下:
convert.toint32(object)
然后他工作并给我0,这意味着投掷是有效的。
我想知道两者之间的区别。
1. (int)object
2.convert.toint32(object)
(int)
仅对实际为整数的对象有效。例如,(int) "12"
将引发无效的强制类型转换异常。
Convert.ToInt32
尽最大努力将其输入转换为整数。因此,Convert.ToInt32("12")
将返回12。准确来说,如果对象实现了IConvertible接口(System.String就实现了该接口),则Convert.ToInt32
将调用IConvertible.ToInt32方法。
这两种方法完全不同。第一种是casting
,第二种是conversion
。
Conversion
是在需要将非整数
值转换为int时使用的。
Casting
用于将已经封装为Object
类型的int
实例unbox
回int
类型。
(Type)val
可以表示以下内容:
object
值,(int)object
将假定它是一个 拆箱 操作,因此只有当对象是一个 boxed int
(或 boxed int-enum)时才能工作。如果对象值实际上是字符串或 boxed-float 等,则会失败。
Convert.ToInt32
的工作方式不同;它运行一些测试,尝试将诸如从 float 进行类型转换(上面已经涵盖)和解析字符串(映射到 int.Parse
)等内容汇集在一起。有很多方法可以将数据转换为int,很大程度上取决于你的数据来源。
最重要的是错误检查,这些方法本身都不是完美的,因此需要决定如何处理它们。
使用(int)进行强制类型转换,使用Convert.ToInt32()进行转换,使用int.Parse()进行解析,都可能会生成异常,例如InvalidCastException、FormatException和OverflowException,应该使用try/catch来处理失败的结果。
使用int.TryParse()进行解析将返回一个true/false结果,表示解析是否成功,并且如果成功,将在函数调用中设置输出参数的值。
如果你真的想将任何对象转换为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");
}
}
(int) something
可以在以下两种情况下使用:
something
是int类型,并且已经装箱到对象中,我们使用调用来将其取消装箱。如果您将int放入ArrayList或HttpSession中等,就会发生这种情况。
something
不是int,但它的类型可以明确转换为int,例如内置类型的short、long、float,或实现了明确转换运算符的类型。
Convert.ToInt32
调用something
类型的IConvertible.ToInt32方法,基本等同于int.Parse(something)
。