java tryparse用法_数据类型转换的三种方式 Convert,parse和TryParse的解析

以Int类型为例,具体说明Convert.ToInt32(object value),int.Parse(object value)和int.TryParse(string s,out int result)的用法

一.int.Parse

int.Parse的底层实现原理(可以直接忽略,不需深究)

[SecuritySafeCritical]internal static unsafe int ParseInt32(strings, NumberStyles style, NumberFormatInfo info)

{byte* stackBuffer = stackalloc byte[0x72];

NumberBuffer number= newNumberBuffer(stackBuffer);int num = 0;

StringToNumber(s, style,ref number, info, false);if ((style & NumberStyles.AllowHexSpecifier) !=NumberStyles.None)

{if (!HexNumberToInt32(ref number, refnum))

{throw new OverflowException(Environment.GetResourceString("Overflow_Int32"));

}returnnum;

}if (!NumberToInt32(ref number, refnum))

{throw new OverflowException(Environment.GetResourceString("Overflow_Int32"));

}returnnum;

}

int.Parse()是一种类容转换;表示将数字内容的字符串转为int类型。

如果字符串为空,则抛出ArgumentNullException异常;

如果字符串内容不是数字,则抛出FormatException异常;

如果字符串内容所表示数字超出int类型可表示的范围,则抛出OverflowException异常;

二.Convert.ToInt32

Convert.ToInt32实现方式是这样的(反射源程序集可知):

public static int ToInt32(stringvalue)

{if (value == null)

{return 0;

}return int.Parse(value, CultureInfo.CurrentCulture);

}

从上面的代码可以看出Convert.toInt32其实可以看作是对 int.Parse一个改进,因为它判断了值等于null的情况

Convert.ToInt32 参数为 null 时,返回 0

但当Convert.ToInt32参数为string.empty是,就会抛出System.FormatException: 输入字符串的格式不正确异常。

三. int.TryParse

[SecuritySafeCritical]internal static unsafe bool TryParseInt32(string s, NumberStyles style, NumberFormatInfo info, out intresult)

{byte* stackBuffer = stackalloc byte[0x72];

NumberBuffer number= newNumberBuffer(stackBuffer);

result= 0;if (!TryStringToNumber(s, style, ref number, info, false))

{return false;

}if ((style & NumberStyles.AllowHexSpecifier) !=NumberStyles.None)

{if (!HexNumberToInt32(ref number, refresult))

{return false;

}

}else if (!NumberToInt32(ref number, refresult))

{return false;

}return true;

}

int.TryParse 可以看作是对int.Parse和Convert.toInt32的改进。

它既判断了值等于null的情况,还判断了string.empty 这样空字符的情况。

所以它不会产生异常,转换成功返回 true,转换失败返回 false。

最后一个参数为输出值,如果转换失败,输出值为 0,如果转换成功,输出值为转换后的int值

四.int.Parse,Convert.ToInt和int.TryParse的比较

1.参数和适用对象不同

int.Parse的参数数据类型只能是string类型,适用对象为string类型的数据

convert.toInt参数比较多,具体可以参见最下面的重载列表

int.TryParse的参数只能是只能是string类型,适用对象为string类型的数据

2.异常情况不同

异常主要是针对数据为null或者为""的情况

Convert.ToInt32 参数为 null 时,返回 0;Convert.ToInt32 参数为 "" 时,抛出异常;

int.Parse 参数为 null 时,抛出异常。; int.Parse 参数为 "" 时,抛出异常。

int.TryParse

3.返回值不同

int.TryParse与int.Parse和Convert.ToInt 在返回值的不同是返回bool类型。获取转换后的值是通过out result这个参数获取的。

五.附

Convert.ToInt 参数重载列表

名称描述

4ded08bf27c495a15ce4eda9b8ebc413.png 

4ded08bf27c495a15ce4eda9b8ebc413.png

将指定的布尔值转换为等效的 32 位带符号整数。

4ded08bf27c495a15ce4eda9b8ebc413.png 

4ded08bf27c495a15ce4eda9b8ebc413.png

将指定的 8 位无符号整数的值转换为等效的 32 位有符号整数。

4ded08bf27c495a15ce4eda9b8ebc413.png 

4ded08bf27c495a15ce4eda9b8ebc413.png

将指定的 Unicode 字符的值转换为等效的 32 位有符号整数。

4ded08bf27c495a15ce4eda9b8ebc413.png 

4ded08bf27c495a15ce4eda9b8ebc413.png

将指定的十进制数的值转换为等效的 32 位带符号整数。

4ded08bf27c495a15ce4eda9b8ebc413.png 

4ded08bf27c495a15ce4eda9b8ebc413.png

将指定的双精度浮点数的值转换为等效的 32 位带符号整数。

4ded08bf27c495a15ce4eda9b8ebc413.png 

4ded08bf27c495a15ce4eda9b8ebc413.png

Converts the value of the specified 16-bit signed integer to an equivalent 32-bit signed integer.

4ded08bf27c495a15ce4eda9b8ebc413.png 

4ded08bf27c495a15ce4eda9b8ebc413.png

返回指定的 32 位有符号整数;不执行实际的转换。

4ded08bf27c495a15ce4eda9b8ebc413.png 

4ded08bf27c495a15ce4eda9b8ebc413.png

Converts the value of the specified 64-bit signed integer to an equivalent 32-bit signed integer.

4ded08bf27c495a15ce4eda9b8ebc413.png 

4ded08bf27c495a15ce4eda9b8ebc413.png

将指定对象的值转换为 32 位带符号整数。

4ded08bf27c495a15ce4eda9b8ebc413.png 

4ded08bf27c495a15ce4eda9b8ebc413.png

将指定的 8 位带符号整数的值转换为等效的 32 位带符号整数。

4ded08bf27c495a15ce4eda9b8ebc413.png 

4ded08bf27c495a15ce4eda9b8ebc413.png

将指定的单精度浮点数的值转换为等效的 32 位带符号整数。

4ded08bf27c495a15ce4eda9b8ebc413.png 

4ded08bf27c495a15ce4eda9b8ebc413.png

将数字的指定字符串表示形式转换为等效的 32 位带符号整数。

4ded08bf27c495a15ce4eda9b8ebc413.png 

4ded08bf27c495a15ce4eda9b8ebc413.png

将指定的 16 位无符号整数的值转换为等效的 32 位有符号整数。

4ded08bf27c495a15ce4eda9b8ebc413.png 

4ded08bf27c495a15ce4eda9b8ebc413.png

将指定的 32 位无符号整数的值转换为等效的 32 位有符号整数。

4ded08bf27c495a15ce4eda9b8ebc413.png 

4ded08bf27c495a15ce4eda9b8ebc413.png

Converts the value of the specified 64-bit unsigned integer to an equivalent 32-bit signed integer.

4ded08bf27c495a15ce4eda9b8ebc413.png 

4ded08bf27c495a15ce4eda9b8ebc413.png

使用指定的区域性特定格式信息,将指定对象的值转换为 32 位带符号整数。

4ded08bf27c495a15ce4eda9b8ebc413.png 

4ded08bf27c495a15ce4eda9b8ebc413.png

使用指定的区域性特定格式设置信息,将数字的指定字符串表示形式转换为等效的 32 位带符号整数。

4ded08bf27c495a15ce4eda9b8ebc413.png 

4ded08bf27c495a15ce4eda9b8ebc413.png

将指定基数的数字的字符串表示形式转换为等效的 32 位有符号整数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#的TryParse方法是一种用于将字符串转换为特定类型的方法,它可以避免在转换失败时引发异常。常见的一些TryParse方法包括Enum.TryParse、DateTime.TryParse、Double.TryParse、Decimal.TryParse、Guid.TryParse、TimeSpan.TryParse和int.TryParse等。这些方法可以用于将字符串转换为相应的枚举值、日期时间、浮点数、十进制数、全局唯一标识符、时间间隔和整数等数据类型。 与一些其他的转换方法(如int.Parse)相比,TryParse方法具有更好的容错性。当转换失败时,TryParse方法会返回一个布尔值,指示转换是否成功,并将转换后的值存储在一个输出参数中。这样,我们可以根据返回的布尔值来确定转换是否成功,并且不会引发异常。 另外,Convert.ToInt32和(int)也可以将类型转换为整数,但它们的使用方式略有不同。Convert.ToInt32方法可以将各种类型(如字符串、布尔值、日期时间等)转换为整数,而(int)则是一种显式类型转换方式。int.Parse和Int32.Parse是将字符串转换为整数的方法,如果转换失败会引发异常,而int.TryParse是将字符串转换为整数的另一种方法,它返回一个布尔值来指示转换是否成功,避免了异常的引发。 综上所述,C#的TryParse方法是一种更安全、更可靠的数据转换方法,可以避免异常的引发,并提供了更好的容错性。在需要将字符串转换为特定类型时,可以使用相应的TryParse方法来进行转换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值