什么更好: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操作的噪声中,更多值得注意的例外也可能被淹没。