哪一个更快、更强大和可靠?为什么?
int.Parse()
int.TryParse()
Convert.ToInt32()
Convert.Int32()
调用带有额外null检查的Int32.Parse()
, 所以Int32.Parse()
可能会稍微慢一些。这就是为什么Convert.Int32()
会更快(因为它在Int32.Parse()
之前捕获了null)。
Int32.Parse()
在内部调用Number.ParseInt32()
,当无法解析数字时抛出异常。
Int32.TryParse()
在内部调用Number.TryParseInt32()
,其代码与Number.ParseInt32()
类似,但不像抛出异常那样消耗资源,而是直接返回false。Int32.TryParse()
将为非null值提供最快的结果。如果大多数调用可能包含null,则我认为Convert.Int32()
的性能会更好。我个人使用
int.Parse(...)
如果我有一个字符串作为源码并且
Convert.ToInt32(...)
int.Parse
。如果我想立即处理它,我会在解析字符串时使用int.TryParse
。如果不是字符串(无论是十进制数、封装在对象中的整数还是其他类型),我会使用Convert.ToInt32
。所以我和你的想法一致。 :-) - Jaxidian无论是使用 int.Parse
还是 Convert.Int32
,它们在内部都会调用 int.TryParse
,所以它们之间的性能差异应该微不足道。 TryParse
是最通用的方法,因为它允许你决定是否抛出异常,但除此之外这些方法之间并没有区别。
Convert.ToInt32(string) 调用 Int32.Parse(string)。
然而,如果您使用 Int32.Parse(或等效的 int.Parse),则可以指定在解析时使用的全球化和格式。
Int.Parse 会更快,因为它不执行 try/catch。
Int.TryParse 更可靠,如果您没有传递无法转换的值,则不会引发错误。
int.Parse
不会更快。 - Dirk Vollmar我发现答案取决于上下文。
如果我将一个 DataRow
转换为对象,我会有很多 Convert.ToXXX
的调用,所以我会使用 Convert.ToInt32
,因为这与该转换周围的其他语句一致。
在其他情况下,如果我想在字符串无法解析时抛出异常(快速失败),我会使用 int.Parse
,因为它会为我抛出异常,而 int.TryParse
倾向于生成更丑陋的代码(我从来不喜欢输出参数)。
如果我只想在字符串无法解析时指定一些默认值,我会使用 int.TryParse
,否则,我就必须自己处理异常,这既昂贵又丑陋。
然而,除非您调用解析站点数十亿次,否则我会惊讶地看到任何三种格式之间存在可辨别的时间差异,因此我更喜欢一个更易读的代码片段,而不是一个微不足道的更快变体。
null
,它将会更慢,根据http://blogs.msdn.com/b/ianhu/archive/2005/12/19/505702.aspx:“区别在于,正如我们所猜测的那样,在异常处理代码中。这就是为什么Convert比Parse更快,因为Convert可以处理坏数据集中的空字符串而不抛出异常。” - Dirk Vollmar