This is a trick that happens to work because it is simply a rewriting of an ordinary if-statement. This code is equivalent to this:
int variable;
if (int.TryParse(stringVariable, out variable))
variable = variable;
else
variable = 0;
The sequence is as follows:
int.TryParse
is called, variable
is not initialized before this but it doesn't have to either. An out
parameter does not require a definite assigned variable. As part of the method execution, the variable
will be given a value, and int.TryParse
will return true
or false
.
If the method returns true
then the result of the expression will be variable
and thus we will execute basically variable = variable
.
If the method returns false
then the result of the expression will instead be 0
, and variable
will now be given the value 0
regardless of what it was given as part of int.TryParse
. In this case, however, this will not change the variable because int.TryParse
has already given the variable
a default value when it returns false
which also happens to be 0
.
This is basically a way to get everything onto one line.
Personally I would've written this code like this:
int variable;
int.TryParse(stringValue, out variable);