我知道..我知道...在这里性能不是主要关注点,但只是出于好奇,哪个更好?
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
,并将其与条件(三元)运算符整齐地放在一行上,就像这样:int myInt = int.TryParse(myString, out myInt) ? myInt : 0;
int myInt; int.TryParse(myString, out myInt);
。如果失败,TryParse() 已将结果设为 0。 - user64528010
。 - greg84第一种是常规编码方式。第二种被视为按异常情况进行编码。
就我个人而言,我更喜欢:
if (int.TryParse(string, out num))
{
...
}
if (int.TryParse(string, out num))
首先,远远地说。正如乔治所说,第二个是通过异常编码,对性能有重大影响。而性能应该始终是一个关注点。
需要记住的另一件事是,异常可以(可选地)记录在Visual Studio调试/输出窗口中。即使异常的性能开销可能微不足道,但在调试时为每个异常编写一行文本可能会使事情变得非常缓慢。更值得注意的异常可能会淹没在所有失败的整数解析操作的噪音中。
Parse
与TryParse
之间的区别,而不是问题中的具体代码示例。正如我在评论中提到的那样,我同意TryParse
几乎总是更好的选择,但关键词是“几乎”,而不是“总是”。 - Fredrik Mörk