什么更好:int.TryParse或尝试{int.Parse()} catch

我知道…我知道…performance不是这里主要关心的,但只是为了好奇,有什么更好的?

bool parsed = int.TryParse(string, out num); if (parsed) ... 

要么

 try { int.Parse(string); } catch () { do something... } 

更好是非常主观的。 例如,我个人更喜欢int.TryParse ,因为我经常不关心为什么parsing失败,如果失败。 但是, int.Parse可以(根据文档 )抛出三个不同的例外:

  • input为空
  • input不是有效的格式
  • input包含一个处理溢出的数字

如果你关心为什么失败,那么int.Parse显然是更好的select。

一如往常,情境是王道。

转换有时会失败,或者预期和正常转换有时会失败吗? 如果前者使用exception 。 如果后者, 避免例外 。 出于某种原因,例外被称为“例外” 你只能用它们来处理特殊情况。

如果确实希望转换有时会失败,那么我喜欢用int.TryParse并且在条件(三元)运算符的一行上整齐地使用int.TryParse ,如下所示:

 int myInt = int.TryParse(myString, out myInt) ? myInt : 0; 

在这种情况下,如果TryParse方法失败,则零将被用作默认值。

对于可空types也非常有用,如果转换失败,它将用null覆盖任何默认值。

首先。 第二个被认为是由例外编码

我个人更喜欢:

 if (int.TryParse(string, out num)) { ... } 

首先! 你不应该例外编码。

你可以缩短它

if (int.TryParse(string, out num))

首先,到目前为止。 正如乔治所说,其次是由例外编码,并有重大的性能影响。 性能应该是一个关心,总是。

捕捉一个exception有更多的开销,所以我会去TryParse。

另外,如果转换失败,TryParse方法不会引发exception。 它无需使用exception处理来在s无效且无法成功parsing的情况下testingFormatException。

最后一部分从这里复制粘贴

还有一点要记住,在Visual Studiodebugging/输出窗口中logging(可选)exception。 即使exception的性能开销可能是微不足道的,debugging时为每个exception写一行文本都会使事情变得缓慢。 在所有失败的整数parsing操作的噪声中,更多值得注意的例外也可能被淹没。