繁体   English   中英

C#-转换-澄清

[英]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关键字不能与值类型(例如Int32PointDateTime )一起使用。

在我自己的代码中,我通常将它们混合使用,但是通常我遵循以下方案:

  • 如果要将字符串转换为数字类型,通常会使用该数字类型提供的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM