开发中可以说几乎随时会涉及到字符串处理,本人觉得很有必要把平时遇到的问题和大家一起讨论,如果大家有好的见解和心得请留言和大家分享。
1.Convert.ToInt32与Int32.Parse的恩恩怨怨
2.Split的3种用法
3.@"abc"和"abc"区别在那里
4.保留2位有效小数及四舍五入
5.url传递中文的解决方案
6.把123456789转换为12-345-6789的3种方法
7.交换两个指定位置字符的4种方法
8.“%10”的妙用
9.输出21个AAAAAAAAAAAAAAAAAAAAA的巧妙做法
1.Convert.ToInt32与Int32.Parse的恩恩怨怨
这2个方法都可以把把string解析为int,那么我们一定会有疑问:到底他们有什么区别?什么时候该用什么?性能如何等等。
其实在2.0里还有Int32.TryParse也实现了同样的效果。

表面上看,可见3个方法都实现了同样的效果!
那么我们把代码改一下:
//string myString = "1234";
string myString = null;
int myint = 0;
myint = Convert.ToInt32(myString);
Console.Write(myint+"\r\n");
myint = Int32.Parse(myString);
Console.Write(myint+"\r\n");
Int32.TryParse(myString, out myint);
Console.Write(myint+"\r\n");
这次字符串是null,那么运行结果会怎样呢?
这是因为如果解析错误:
Convert.ToInt32()在null时不抛异常而是返回0;
Int32.Parse()要抛异常;
Int32.TryParse()不抛异常,会返回true或false来说明解析是否成功,如果解析错误,调用方将会得到0值。
由于Convert.ToInt32()在null时我们看不到Int32.TryParse()的运行结果所以再分调试和不调试来看结果的差异:
调试:
不调试:
其实一般出bug毕竟属于少数,而且大家都会测试保证不出bug,那么我们最关心的或许就是性能。
再把代码修改一下:
2
我们让3个方法执行100万次转换看毫秒的差异:
为了准确多做几次测试:
第二次
第三次
| 第一次 | 第二次 | 第三次 | |
| Convert.ToInt32() | 532-204=328 | 1163-750=413 | 782-469=313 |
| Int32.Parse() | 844-532=312 | 360-63=297 | 1094-782=312 |
| Int32.TryParse() | 1141-844=297 | 657-360=297 | 375-94=281 |
其实我们可以得出结论:
3个方法几乎没有差异!
如果真要追求完美那么性能的差异是:Int32.TryParse()优于Int32.Parse()优于Convert.ToInt32()。
所以个人建议:.NET1.1下用Int32.Parse();.NET2.0用Int32.TryParse()。
那么为什么会这样呢?
其实这些数据不是偶然的,因为:
Convert.ToInt32 会把最终的解析工作代理给 Int32.Parse;
Int32.Parse 会把最终的解析工作代理给Number.ParseInt32;
Int32.TryParse 会把最终的解析工作代理给Number.TryParseInt32。
至于其他进制的转换请参考MSDN。重载参数即可!
关于本站 | 帮 助 | 广告服务 | 版权声明 | 业务合作 | 捐助本站 | 软件发布 | 联系我们
77资源下载 www.77zy.com ©2007-2008 版权所有
备案编号:赣ICP备07002641号 QQ:674648476