处理和转换中哪一个更快int.Parse(),int.TryParse(),Convert.Int32()

哪一个更快,更强大,更可靠。 为什么?

int.Parse() int.TryParse() Convert.ToInt32() 

请阅读此内容 (“性能分析Parse与TryParse与ConvertTo相比”)以获取更多信息。

如果您不确定该字符串是否可解析,则int.TryParse()将比其他任何一个更快并捕获exception。

Convert.Int32()调用Int32.Parse()并额外检查null, 因此Int32.Parse()可能会更快一些。 这就是为什么Convert.Int32()会更快(它在Int32.Parse()必须处理之前捕获null)。

Int32.Parse()内部调用Number.ParseInt32() ,当无法解析数字时抛出exception。

Int32.TryParse()内部调用Int32.TryParse() ,它具有与Number.ParseInt32()类似的代码,但不是抛出exception,而是简单地返回false …这会引入更少的开销。

考虑到所有这些变量,我的猜测是Int32.TryParse()将为非空值提供最快的结果。 如果大多数调用都有可能包含空值,我会说Convert.Int32()会表现得更好。

……所有这些都是通过.NET Reflector的强大function带给您的。

int.ParseConvert.Int32内部调用int.TryParse ,因此它们之间的性能差异应该是微不足道的。 TryParse是最通用的,因为它允许您决定是否抛出exception,但是这些方法之间没有区别。

Convert.ToInt32(string)调用Int32.Parse(string)。

但是,如果使用Int32.Parse(或等效的int.Parse),则可以指定解析时使用的全球化和格式。

Int.Parse会更快,因为它不会执行try / catch。

Int.TryParse更可靠,如果您不传递不可转换的值,则不会抛出错误。

我个人用

 int.Parse(...) 

如果我有一个字符串作为源和

 Convert.ToInt32(...) 

如果我有一个valueType(double,decimal)作为源,因为否则我必须将它强制转换为字符串并处理本地文化。

我发现答案取决于背景。

如果我将(例如) DataRow转换为对象,我将有很多Convert.ToXXX调用,因此我将使用Convert.ToInt32因为这与该转换的其他语句一致。

在其他情况下,如果我想在字符串不解析时抛出exception(快速失败),我将使用int.Parse ,因为它会为我抛出exception,并且int.TryParse倾向于生成更丑陋的代码(I’从来没有成为参数的粉丝)

如果我只想在字符串不解析时指定一些默认值,我将使用int.TryParse ,因为否则,我将不得不自己处理exception,这既昂贵又丑陋。

但是,除非你数十亿次调用解析站点,否则我会惊讶地发现这三种格式之间存在明显的时间差异,因此我更倾向于使用更易读的代码,而不是更快的变体。