我知道..我知道...性能不是这里的主要关注点,只是出于好奇,什么更好?
bool parsed = int.TryParse(string, out num);
if (parsed)
...
或者
try {
int.Parse(string);
}
catch () {
do something...
}
我知道..我知道...性能不是这里的主要关注点,只是出于好奇,什么更好?
bool parsed = int.TryParse(string, out num);
if (parsed)
...
或者
try {
int.Parse(string);
}
catch () {
do something...
}
更好是高度主观的。例如,我个人更喜欢int.TryParse
,因为我通常不关心解析失败的原因,如果它失败了。但是,int.Parse
可以(根据文档)抛出三个不同的异常:
如果您关心它失败的原因,那么int.Parse
显然是更好的选择。
一如既往,语境为王。
转换有时会失败是例外,还是转换有时会失败是预期和正常的?如果是前者,请使用异常。如果是后者,请避免异常。异常被称为“异常”是有原因的;您应该只使用它们来处理特殊情况。
如果确实预计转换有时会失败,我喜欢使用int.TryParse
and 这样整齐地与条件(三元)运算符放在一起,如下所示:
int myInt = int.TryParse(myString, out myInt) ? myInt : 0;
在这种情况下,如果 TryParse 方法失败,将使用零作为默认值。
null
对于可空类型也非常有用,如果转换失败,它将覆盖任何默认值。
首先。第二种被认为是异常编码。
就个人而言,我更喜欢:
if (int.TryParse(string, out num))
{
...
}
首先!您不应该按异常编码。
你可以把它缩短为
if (int.TryParse(string, out num))
首先,到目前为止。正如乔治所说,第二个是异常编码,对性能有重大影响。性能应该始终是一个问题。
捕获异常需要更多开销,所以我会选择 TryParse。
另外,如果转换失败,TryParse 方法不会抛出异常。它消除了在 s 无效且无法成功解析的情况下使用异常处理来测试 FormatException 的需要。
最后一部分从这里复制粘贴
要记住的另一件事是异常记录(可选)在 Visual Studio 调试/输出窗口中。即使异常的性能开销可能微不足道,调试时为每个异常编写一行文本也会减慢速度。更值得注意的异常也可能淹没在失败的整数解析操作的所有噪音中。