哪一个更快,更强大,更可靠。为什么?
int.Parse()
int.TryParse()
Convert.ToInt32()
答案 0 :(得分:9)
Go read this(“Performance Profiling Parse vs. TryParse vs. ConvertTo”)获取更多信息。
如果您不确定该字符串是否可解析,那么int.TryParse()
将比其他任何一个更快并且捕获异常。
答案 1 :(得分:5)
Convert.Int32()
调用Int32.Parse()
并额外检查null,以便这就是为什么Int32.Parse()
可能会更快。Convert.Int32()
将是更快(它在Int32.Parse()
必须处理之前捕获空值。)
Int32.Parse()
在内部调用Number.ParseInt32()
,当无法解析数字时会抛出异常。
Int32.TryParse()
在内部调用Number.TryParseInt32()
,其代码与Number.ParseInt32()
类似,但不会抛出异常,而只是返回false ...这会减少开销。
考虑到所有这些变量,我的猜测是Int32.TryParse()
将为非空值提供最快的结果。如果大多数调用都有可能包含空值,我会说Convert.Int32()
会表现得更好。
......所有这些都是通过.NET Reflector的力量带给你的。
答案 2 :(得分:0)
int.Parse
和Convert.Int32
内部都会调用int.TryParse
,因此它们之间的性能差异应该是微不足道的。 TryParse
是最通用的,它允许您决定是否抛出异常,但这些方法之间没有区别。
答案 3 :(得分:0)
Convert.ToInt32(string)调用Int32.Parse(string)。
但是,如果使用Int32.Parse(或等效的int.Parse),则可以指定解析时使用的全球化和格式。
Int.Parse会更快,因为它不会执行try / catch。
Int.TryParse更可靠,如果你没有传递一个不可兑换的值,就不会抛出错误。
答案 4 :(得分:0)
我个人使用
int.Parse(...)
如果我有一个字符串作为源和
Convert.ToInt32(...)
如果我有一个valueType(double,decimal)作为源,因为否则我必须将它强制转换为字符串并处理本地文化。
答案 5 :(得分:0)
我发现答案取决于具体情况。
如果我正在将DataRow
转换为对象,我会进行大量Convert.ToXXX
次调用,因此我会使用Convert.ToInt32
,因为这与关于转换的其他陈述。
在其他情况下,如果我想在字符串不解析时抛出异常(快速失败),我将使用int.Parse
,因为这会引发异常,int.TryParse
趋于生成更丑陋的代码(我从未成为参数的粉丝)
如果我只是想在字符串不解析时指定一些默认值,我将使用int.TryParse
,否则,我将不得不自己处理异常,这既昂贵又丑陋
然而,除非你数十亿次调用解析网站,否则我会惊讶地发现这三种格式之间存在明显的时间差异,所以我宁愿选择更易读的代码片段。