[英]C# - Conversion -Clarification
对于神童来说,这可能是一个非常基本的问题,但我对此有疑问。
在转换期间,我们使用:
每种使用有哪些限制?
int.Parse假定字符串为参数,因此仅适用于将原始字符串表示形式转换为整数
Convert.ToInt32()将尝试将几乎所有对象转换为整数表示形式。 如果表示形式不是有效的int(即使用值为55.3的浮点数或包含单词的字符串),则将引发FormatException。 如果整数太大而不能容纳在int中,则将发生OverflowException。
(int)是直接转换。 基本上是说“我知道这个对象实际上是一个整数,将其视为此类”。 如果对象实际上不是整数,则将获得无效的强制转换异常。
最后,as的行为与直接转换相同,不同之处在于对象的类型不正确时,它将分配null。 不知道int是不可为空的类型,但肯定可以将其用于int
int? myInt = someVar as int?;
Convert.ToNnnn
具有其重载所规定的限制; 例如,您不能调用Convert.ToMyCustomType
(因为该方法不存在)。 您可以将几乎所有内容传递给Convert.ToString
(或Convert.ToInt32
或任何其他Convert.ToNnnn
方法),但结果可能并不总是有意义。 另外,如果方法无法执行转换,则可能抛出InvalidCastException
。
常规类型的大小写( (int)someValue
)可以在所有有显式转换可用的情况下使用。 如果您尝试执行非法投射,则会抛出异常。
as
关键字可用于将类型转换为其他(引用)类型(如果不可能,它将返回null)。 as
关键字不能与值类型(例如Int32
, Point
或DateTime
)一起使用。
在我自己的代码中,我通常将它们混合使用,但是通常我遵循以下方案:
TryParse
。 as
关键字。 try/catch
块中使用常规类型转换。 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"]
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.