ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2022-07-25 11:34:41  阅读:212  来源: 互联网

标签:string C# sw 程序 Parse result double 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。

 

标签:string,C#,sw,程序,Parse,result,double,TryParse
来源: https://www.cnblogs.com/wwwen/p/16516826.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有