对于神童来说,这可能是一个非常基本的问题。但我有一个疑问是要处理它。
转换期间我们使用:
int.Parse(东西)
的
Convert.ToInt32或Convert.ToString()....
的
(的Int32)(someValue中)
的
即使我们使用“as”
的
使用每种限制有哪些限制?
答案 0 :(得分:4)
int.Parse假设一个字符串作为参数,因此仅适用于将原始字符串表示转换为整数
Convert.ToInt32()将尝试将几乎任何对象转换为整数表示。如果表示不是有效的int(即使用值为55.3的float或包含单词的字符串),则会引发FormatException。如果整数太大而不适合int,则会发生OverflowException。
(int)是直接演员。它基本上是在说“我知道这个对象实际上是一个整数,就这样对待它”。如果对象实际上不是整数,则会得到无效的强制转换异常。
最后,由于行为与直接转换的行为相同,除非对象的类型不正确,否则它将指定null。不确定这是如何适用于int,它是一个非可空类型,但肯定可以与
一起使用int? myInt = someVar as int?;
答案 1 :(得分:1)
Convert.ToNnnn
有超载规定的限制;例如,您无法调用Convert.ToMyCustomType
(因为该方法不存在)。您可以将几乎任何内容传递到Convert.ToString
(或Convert.ToInt32
或任何其他Convert.ToNnnn
方法),但结果可能并不总是有意义。此外,如果该方法无法执行转换,则可能会抛出InvalidCastException
。
常规类型案例((int)someValue
)可用于存在明确转换的所有情况。如果你试图进行非法演员表演,你会得到一个例外。
as
关键字可用于将类型转换为另一种(引用)类型(如果不可能,它将返回null)。 as
关键字不能与值类型(例如Int32
,Point
或DateTime
)一起使用。
在我自己的代码中,我通常使用它们的混合,但一般来说我遵循以下方案:
TryParse
。as
关键字。try/catch
块内使用常规类型转换。答案 2 :(得分:0)
Convert.ToInt32
可以将各种类型(DateTime,Decimal等)转换回整数,而int.Parse()
只能从字符串转换。
如果您只是将字符串解析为整数,Convert.ToInt32
只是int.Parse
的别名,那么您也可以使用int.Parse
代替。
关于转换,您不能将字符串转换为整数,您必须像上面提到的那样转换。
考虑您正在使用数据库,并且在存储整数数据时,您有一个低效声明为varchar
的列。例如,在使用SqlDataReader时,您无法执行(int)dr["column"]
,而是必须使用int.Parse(dr["column"].ToString())
。如果列在数据库中属于int
列类型,则可以使用强制转换:(int)dr["column"]
。