I know.. I know... Performance is not the main concern here, but just for curiosity, what is better?
bool parsed = int.TryParse(string, out num);
if (parsed)
...
OR
try {
int.Parse(string);
}
catch () {
do something...
}
I know.. I know... Performance is not the main concern here, but just for curiosity, what is better?
bool parsed = int.TryParse(string, out num);
if (parsed)
...
OR
try {
int.Parse(string);
}
catch () {
do something...
}
If it is indeed expected that the conversion will sometimes fail, I like to use
int.TryParse
and such neatly on one line with the conditional (Ternary) operator, like this:In this case zero will be used as a default value if the TryParse method fails.
Also really useful for nullable types, which will overwrite any default value with
null
if the conversion fails.Personally, I'd prefer:
Something else to keep in mind is that exceptions are logged (optionally) in the Visual Studio debug/output window. Even when the performance overhead of exceptions might be insignificant, writing a line of text for each exception when debugging can slow things right down. More noteworthy exceptions might be drowned amongst all the noise of failed integer parsing operations, too.
The first! You should not code by exception.
you could shorten it to
if (int.TryParse(string, out num))
The first. The second is considered coding by exception.
Better is highly subjective. For instance, I personally prefer
int.TryParse
, since I most often don't care why the parsing fails, if it fails. However,int.Parse
can (according to the documentation) throw three different exceptions:If you care about why it fails, then
int.Parse
is clearly the better choice.As always, context is king.