C# - 转换-Clarification

时间:2009-08-20 10:40:29

标签: c#

对于神童来说,这可能是一个非常基本的问题。但我有一个疑问是要处理它。

转换期间我们使用:

int.Parse(东西)
Convert.ToInt32或Convert.ToString()....

  (的Int32)(someValue中)

即使我们使用“as”

使用每种限制有哪些限制?

3 个答案:

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

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

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