在编程过程中,数据转换是经常要用到的,C#中数据转换的方法很多,拿将目标对象转换为整型(int)来讲,有四种方法:分别为(int)、int.Parse()、int.TryParse()和Convert.ToInt32(),那么这四种方法对被转换对象有什么限制,以及各自之间有什么区别呢?相信很多童鞋也不能完全说清楚。
下面从被转换对象说起,在我们实际开发项目的过程中,我们碰到需要被转换的类型大概有3大类,分别是空值(NULL)、数字类型(包含float,double,int,long等)和字符串(string)这3类。
先看第一种情况:NULL,采用如下代码进行测试:
int a = Convert.ToInt32(null);
int b;
bool rlt = int.TryParse(null, out b);
int c = int.Parse(null);
int d = (int)null;
很明显,在运行之前VS就会在最后一句报错:“Cannot convert null to 'int' because it is a non-nullable value type”,这是说不能将NULL转换为INT因为INT是一个非空值类型,然后注释掉最后一句,再运行一下,发现这一句(int c = int.Parse(null);)会报如下错误:“Value cannot be null.”,值不能为空,a和b分别返回0,rlt为false;
然后继续看第二种情况:数字类型(主要测试double和long类型),先将代码修改如下:
double m = 1.232d;
int a = Convert.ToInt32(m);
int b;
bool rlt = int.TryParse(m.ToString(), out b);
int c = int.Parse(m.ToString());
int d = (int)m;
然后运行一下,发现这一句(int c = int.Parse(m.ToString());)会报错:“Input string was not in a correct format.”,输入的字符串格式不正确,注释掉这一句然后运行,然后查看返回值,a=1,b=0,rlt=false,d=1,将m的值修改为1.532d后再运行一次,查看结果为a=2,b=0,rlt=false,d=1;下面测试long类型,将代码修改为:
long m = 9223372036854775807;
int a = Convert.ToInt32(m);
int b;
bool rlt = int.TryParse(m.ToString(), out b);
int c = int.Parse(m.ToString());
int d = (int)m;
运行后发现(int a = Convert.ToInt32(m);)和(int c = int.Parse(m.ToString());)报错:“Value was either too large or too small for an Int32.”,值对于Int32太大或太小,其他返回结果b=0,rlt=false,d=-1;
下面继续看第三种情况:字符串,同样修改代码如下:
string m = "1.32";
int a = Convert.ToInt32(m);
int b;
bool rlt = int.TryParse(m, out b);
int c = int.Parse(m);
int d = (int)m;
发现最后一句(int d = (int)m;)报错:“Cannot convert type 'string' to 'int'”,不能转换string到int类型,同样注释掉这句再运行,发现(int a = Convert.ToInt32(m);)和(int c = int.Parse(m);)均报如下的错误:“Input string was not in a correct format.”,输入的字符串格式不正确,只有将m的值修改为整型的字符串(如:”12”)才不会报如此错误。
好了,测试做完了,下面进行总结:
1)对于转换对象,Convert.ToInt32()可以为多种类型(例出数字类型外bool,DateTime等),int.TryParse()和int.Parse()只能是整型字符串类型(即各种整型ToString()之后的形式,不能为浮点型,否则int.Parse()就会出现输入的字符串格式不正确的错误,int.TryParse()也会返回false,输出参数为0),(int)只能是数字类型(例float,int,uint等);
2)对于空值NULL,从运行报错的角度讲,(int)强制转换和int.Parse()都不能接受NULL;Convert.ToInt32()其实是在转换前先做了一个判断,参数如果为NULL,则直接返回0,否则就调用int.Parse()进行转换,int.TryParse()其实是对int.Parse()做了一个异常处理,如果出现异常则返回false,并且将输出参数返回0;
3)针对于浮点型的取舍问题,浮点型只有Convert.ToInt32()和(int)能进行转换,但是也是进行取舍了的,Convert.ToInt32()采取的取舍是进行四舍五入,而(int)则是截取浮点型的整数部分,忽略小数部分,例如Convert.ToInt32(1.499d)和(int)1.499d都返回1,Convert.ToInt32(1.5d)返回2,而(int)1.5d还是返回1;
4)关于溢出,将大的数据类型转换为小的数据类型时Convert.ToInt32()和int.Parse()都会报溢出错误,值对于Int32太大或太小,而(int)不报错,但是返回值为-1。
如此可见,我们在进行数据转换前选择转换方法要谨慎,如果是数字类型可以考虑直接用(int)强制转换,如果是整型字符串类型的,考虑用int.Parse()进行转换,如果不是这两种类型,再考虑用Convert.ToInt32()进行转换。
相关推荐
C#中int、Convert、Parse、TryParse的区别对比 C# 中 int、Convert、Parse、TryParse 是四种不同的类型转换方法,它们之间有着不同的应用场景和使用方式。 首先,int 类型转换可以通过强制类型转换来实现,但是...
本文将详细探讨Convert.ToInt32和Int32.Parse这两种常用方法的区别,以及Int32.TryParse的特殊用法,分析它们的性能和适用场景,帮助开发者更好地选择适合的方法。 首先,Convert.ToInt32和Int32.Parse都可以将字符...
在C#编程语言中,将不同的数据类型转换为整型(int)时,有四种主要的方法:`(int)` 强制类型转换、`int.Parse()`、`int.TryParse()` 和 `Convert.ToInt32()`。每种方法都有其特定的用法和处理异常的方式,下面将...
Convert.ToInt32、int.Parse(Int32.Parse)、int.TryParse、(int) 四者都可以解释为将类型转换为 int,那它们的区别是什么呢?Convert.ToInt32 与 int.Parse 较为类似,实际上 Convert.ToInt32 内部调用了 int....
在C#编程语言中,`ToInt32`是System.Convert类的一个静态方法,它用于将各种数据类型转换为32位有符号整数。在这个程序Demo中,我们将深入探讨`ToInt32`函数的用法,以及与之相关的其他转换函数。通过VS2019(Visual...
本文将详细解析四种主要的转换方法:强制类型转换(int),int.Parse,int.TryParse,以及Convert.ToInt32,并讨论它们之间的差异和适用场景。 1. **强制类型转换(int)** `(int)变量名` 是一种显式类型转换,通常...
在C#中,主要通过`Convert.ToInt32`和`Convert.ToString`方法来进行进制转换。例如,如果你有一个十六进制数字(如"1A"),想要转换为十进制,可以使用如下代码: ```csharp string hexValue = "1A"; int decimal...
在 C# 中,有多种方式来实现这一功能,包括 `Int32.Parse()`、`Int32.TryParse()` 和 `Convert.ToInt32()`。 **方法1:使用 `Int32.Parse()`** 此方法直接将字符串转换为整数,如果字符串不能被解析为整数,则会抛...
// 或者:int colorValue = Convert.ToInt32(myColor.ToString("D")); ``` 2. 将int转换为枚举: 将整数值转换回枚举需要使用枚举类型的名称,后面跟着`.`和括号内的整数值。如果整数值在枚举的范围内,转换是...
可以使用`Convert.ToInt32()`或`int.Parse()`函数将字符转换为其Unicode编码,也可以使用`char.ToString()`或`Convert.ToChar()`将整数转换回字符。 **数值字符串与数值之间的转换** C#提供了`int.Parse()`,`int....
在C#中,可以使用`Convert.ToInt32`方法将二进制字符串转换为十进制整数,而`Convert.ToString`方法则用于将十进制整数转换为二进制字符串。例如: ```csharp string binary = "1010"; int decimalValue = Convert....
其次,如果需要将字符串形式的其他进制数转换回十进制,可以使用`int.Parse`或`int.TryParse`方法,但需要配合`Convert.ToInt32`。例如,将一个二进制字符串转换回十进制: ```csharp string binaryString = "1010...
1、int–>string ... int a3 = Convert.ToInt32(s); 总结: 1、可以使用Convert对int,string进行来回转化,并且可以指定转化的进制; 2、转化为string,可以使用ToString方法; 3、转化为int,可以使
- 类似的,`Convert.ToInt32()` 提供了更安全的转换方式,处理无效输入时返回默认值或抛出异常。 - `ToString()` 方法可将数值转换为字符串。 5. **字符串与字符数组/字节数组之间的转换** - `ToCharArray()` ...
1. `Convert.ToInt32()`方法:对于十六进制字符串,可以使用`Convert.ToInt32()`并指定基数16。 ```csharp string hex = "1F"; int decimalValue = Convert.ToInt32(hex, 16); ``` 2. `int.Parse()`或`int....
字符串与数值之间的转换主要涉及`int.Parse()`、`int.TryParse()`、`Convert.ToInt32()`等方法,它们可以将字符串转换为整数。同样,`double.Parse()`等方法用于浮点数转换。反之,`ToString()`方法可以将数值转换为...
int decimalValue = Convert.ToInt32(hexValue, 16); ``` 上述代码中,`16`作为第二个参数传入,告诉`ToInt32`方法输入的字符串是16进制格式的。 此外,还可以使用`int.Parse`或`int.TryParse`方法,配合`"X"`格式...
对于十六进制数,可以使用`Convert.ToInt32(hexString, 16)`将十六进制字符串转换为整数。 最后,日期型数据的转换通常涉及到`DateTime`类型。可以使用`DateTime.ToString()`将日期对象格式化为字符串,或使用`...