改善C#程序的方法-(2)使用TryParse
2022/7/25 14:22:50
本文主要是介绍改善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。
这篇关于改善C#程序的方法-(2)使用TryParse的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#