除了string外的所有基元类型都有两个将字符串转型为本身的方法:Parse和TryParse。
Parse方法:如果字符串格式不满足转换要求,会引发一个一次异常。
TryParse方法:如果字符串格式不满足转换要求,会返回false,同时将接收的变量置为初始值。
例:
1 public static double Parse(string s); 2 public static bool TryParse(string s, out double result);
引发异常这个过程会对性能造成损耗
实验代码:
1 double re; 2 long ticks; 3 4 Stopwatch sw = Stopwatch.StartNew(); 5 for (int i = 0; i < 1000; i++) 6 { 7 try 8 { 9 re = double.Parse("123"); 10 } 11 catch 12 { 13 re = 0; 14 } 15 } 16 sw.Stop(); 17 ticks = sw.ElapsedTicks; 18 Console.WriteLine("double.Parse() 成功,{0} ticks", ticks); 19 20 sw = Stopwatch.StartNew(); 21 for (int i = 0; i < 1000; i++) 22 { 23 if (double.TryParse("123", out re) == false) 24 { 25 re = 0; 26 } 27 } 28 sw.Stop(); 29 ticks = sw.ElapsedTicks; 30 Console.WriteLine("double.TryParse() 成功,{0} ticks", ticks); 31 32 sw = Stopwatch.StartNew(); 33 for (int i = 0; i < 1000; i++) 34 { 35 try 36 { 37 re = double.Parse("aaa"); 38 } 39 catch 40 { 41 re = 0; 42 } 43 } 44 sw.Stop(); 45 ticks = sw.ElapsedTicks; 46 Console.WriteLine("double.Parse() 失败,{0} ticks", ticks); 47 48 sw = Stopwatch.StartNew(); 49 for (int i = 0; i < 1000; i++) 50 { 51 if (double.TryParse("aaa", out re) == false) 52 { 53 re = 0; 54 } 55 } 56 sw.Stop(); 57 ticks = sw.ElapsedTicks; 58 Console.WriteLine("double.TryParse() 失败,{0} ticks", ticks);
运行结果:
double.Parse() 成功,1393 ticks double.TryParse() 成功,1480 ticks double.Parse() 失败,72487036 ticks double.TryParse() 失败,886 ticks
执行成功,Parse和TryParse方法的效率在一个数量级上;执行失败;Parse方法的执行效率明显远低于TryParse方法。
参考:《编写高质量代码改善C#程序的157个建议》陆敏技