Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-转换-澄清_C# - Fatal编程技术网

C#-转换-澄清

C#-转换-澄清,c#,C#,对于神童来说,这可能是一个非常基本的问题。但我怀疑能否处理好它。 在转换过程中,我们使用: int.Parse(某物) Convert.ToInt32或Convert.ToString()。。。。 (Int32)(someValue) 甚至我们用“as” 使用每一个的限制是什么?Convert.tonnn具有其重载所规定的限制;例如,您不能调用Convert.ToMyCustomType(因为该方法不存在)。您可以将几乎任何内容传递到Convert.ToString(或Con

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

在转换过程中,我们使用:

int.Parse(某物)
Convert.ToInt32或Convert.ToString()。。。。

(Int32)(someValue)

甚至我们用“as”


使用每一个的限制是什么?

Convert.tonnn
具有其重载所规定的限制;例如,您不能调用
Convert.ToMyCustomType
(因为该方法不存在)。您可以将几乎任何内容传递到
Convert.ToString
(或
Convert.ToInt32
或任何其他
Convert.tonnn
方法)中,但结果可能并不总是有意义。此外,如果该方法无法执行转换,它可能会抛出一个
InvalidCastException

常规类型的大小写(
(int)someValue
)可用于存在显式转换的所有情况。如果您试图执行非法强制转换,您将收到一个异常

as
关键字可用于将类型强制转换为另一个(引用)类型(如果不可能,则返回null)。
as
关键字不能与值类型一起使用(例如
Int32
Point
DateTime

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

  • 如果我想将字符串转换为数字类型,我通常使用该数字类型提供的
    TryParse
  • 如果我想将类实例强制转换为基类或接口,我通常使用
    作为
    关键字
  • 在其他情况下,我在
    try/catch
    块中使用常规类型转换

Convert.tonnn
具有其重载所规定的限制;例如,您不能调用
Convert.ToMyCustomType
(因为该方法不存在)。您可以将几乎任何内容传递到
Convert.ToString
(或
Convert.ToInt32
或任何其他
Convert.tonnn
方法)中,但结果可能并不总是有意义。此外,如果该方法无法执行转换,它可能会抛出一个
InvalidCastException

常规类型的大小写(
(int)someValue
)可用于存在显式转换的所有情况。如果您试图执行非法强制转换,您将收到一个异常

as
关键字可用于将类型强制转换为另一个(引用)类型(如果不可能,则返回null)。
as
关键字不能与值类型一起使用(例如
Int32
Point
DateTime

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

  • 如果我想将字符串转换为数字类型,我通常使用该数字类型提供的
    TryParse
  • 如果我想将类实例强制转换为基类或接口,我通常使用
    作为
    关键字
  • 在其他情况下,我在
    try/catch
    块中使用常规类型转换

int.Parse假定字符串作为参数,因此仅适用于将原始字符串表示形式转换为整数

Convert.ToInt32()将尝试将几乎任何对象转换为整数表示形式。如果表示形式不是有效的int(即使用值为55.3的浮点或包含单词的字符串),则会引发FormatException。如果整数太大,无法放入整数,则会发生OverflowException

(int)是直接演员。它的基本意思是“我知道这个对象实际上是一个整数,就这样对待它”。如果对象实际上不是整数,则会得到无效的强制转换异常

最后,as的行为与直接强制转换相同,除非对象的类型不正确,否则它将为null赋值。不确定这如何应用于int,因为它是一个不可为null的类型,但肯定可以用于

int? myInt = someVar as int?;

Parse假定字符串作为参数,因此仅适用于将原始字符串表示形式转换为整数

Convert.ToInt32()将尝试将几乎任何对象转换为整数表示形式。如果表示形式不是有效的int(即使用值为55.3的浮点或包含单词的字符串),则会引发FormatException。如果整数太大,无法放入整数,则会发生OverflowException

(int)是直接演员。它的基本意思是“我知道这个对象实际上是一个整数,就这样对待它”。如果对象实际上不是整数,则会得到无效的强制转换异常

最后,as的行为与直接强制转换相同,除非对象的类型不正确,否则它将为null赋值。不确定这如何应用于int,因为它是一个不可为null的类型,但肯定可以用于

int? myInt = someVar as int?;

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”]
Convert。ToInt32
可以从各种类型(日期时间、分贝)转换