改善C#程序的方法-2 使用TryParse

一 使用TryParse,而不是Parse

除string外的所有基元类型,都有两个将string类型转型为其本身类型的方法:Parse 和 TryParse。

以double类型为例,这两个方法最简单的原型为:

public static Double Parse(string s);
public static bool TryParse(string s, out Double result);

两者最大的区别是:如果字符串不满足转换的要求,Parse方法将引发一个异常。TryParse方法不会引发异常,它会返回false,同时将result置为0。

调用Parse方法,如果转型失败,则要将值设定为一个初始值,同时必须要捕获异常:

var str = string.Empty;
double d;
try
{
    d = double.Parse(str);
}
catch (Exception ex)
{
    d = 0;
}

而引发异常这个过程会对性能造成损耗。

从 .Net 2.0 开始,FCL开始对基元类型提供TryParse方法。
下例对Parse和TryParse做个实验对比:

double result;

var sw = Stopwatch.StartNew();
for (int i = 0; i < 1000; i++)
{
    try
    {
        result = double.Parse("123");
    }
    catch
    {
        result = 0;
    }
}
sw.Stop();
Console.WriteLine($"Parse Success,  {sw.ElapsedTicks} ticks");

sw = Stopwatch.StartNew();
for (int i = 0; i < 1000; i++)
{
    if (double.TryParse("123", out result) == false)
    {
        result = 0;
    }
}
sw.Stop();
Console.WriteLine($"TryParse Success,   {sw.ElapsedTicks} ticks");

sw = Stopwatch.StartNew();
for (int i = 0; i < 1000; i++)
{
    try
    {
        result = double.Parse("abc");
    }
    catch
    {
        result = 0;
    }
}
sw.Stop();
Console.WriteLine($"Parse Failed,   {sw.ElapsedTicks} ticks");

sw = Stopwatch.StartNew();
for (int i = 0; i < 1000; i++)
{
    if (double.TryParse("abc", out result) == false)
    {
        result = 0;
    }
}
sw.Stop();
Console.WriteLine($"TryParse Failed,    {sw.ElapsedTicks} ticks");

输出:

Parse Success, 3663 ticks
TryParse Success, 910 ticks
Parse Failed, 13685860 ticks
TryParse Failed, 716 ticks

可见,TryParse的执行效率高于Parse。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#TryParse是一个用于将字符串转换为特定类型方法,它可以用于多种类型,如枚举、日期时间、浮点数、十进制数、GUID和时间间隔等。相比于使用Parse方法来进行转换,TryParse方法更加安全,因为它不引发异常。如果转换成功,TryParse方法返回true并将转换后的值存储在输出参数中;如果转换失败,它返回false并将默认值存储在输出参数中。 在C#中,TryParse方法使用可以灵活适应不同的数据类型和转换需求。比如,Int32.TryParse方法可以将字符串转换为int类型的值,Char.TryParse方法可以将字符串转换为字符类型的值。同时,还可以使用Convert.ToInt32、int.Parse(Int32.Parse)、int.TryParse、(int)等方法类型转换为int,它们的区别在于异常处理的方式和转换失败时的返回值。Convert.ToInt32方法抛出异常,int.Parse和Int32.Parse方法引发FormatException异常,而int.TryParse方法只返回转换是否成功的布尔值,而不引发异常,而直接将转换结果存储在输出参数中。 总而言之,C#TryParse方法是一种更安全和灵活的转换方法,可以用于多种数据类型字符串转换。它可以避免在转换失败时引发异常,并提供了转换成功的判断和结果的输出参数。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C#使用TryParse避免转换出现异常](https://blog.csdn.net/biyusr/article/details/125514364)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [C# Tryparse使用说明](https://blog.csdn.net/u010033786/article/details/126593910)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [C#(int)中Convert、Parse、TryParse的区别](https://download.csdn.net/download/weixin_38572115/12816256)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值