Nota: Este post ha sido importado de mi blog de geeks.ms. Es posible que algo no se vea del todo "correctamente". En cualquier caso puedes acceder a la versión original aquí
Post cortito… 😉
El otro día estaba revisando código y vi algo parecido a lo siguiente (C#):
|
|
Si os pregunto los valores de x e y al final de este código… ¿cual seria vuestra respuesta? No lo preguntéis a Visual Studio… pensadlo.
¿Ya lo teneis?
Exacto: x vale 2 (es de esperar puesto que su valor se incrementa con ++), mientras que por su parte y vale 1. Es decir, el valor de x se incrementa después de la asignación.
Quizá os parezca ilógico, pero está así especificado explícitamente en la especificación de C#:
The ++
and --
operators also support prefix notation, as described in Section 7.6.5. The result of x++
or x--
is the value of x
before the operation, whereas the result of ++x
or --x
is the value of x
after the operation. In either case, x
itself has the same value after the operation.
Sacado de: http://msdn.microsoft.com/en-us/library/aa691363(VS.71).aspx
Ya veis con que cosillas nos divertimos, eh??? 😉
Saludos
PD: De la misma manera (y por la misma razón) en el siguiente código:
int x =1;
x=x++;
x
tiene el valor 1 al finalizar.
En C# este código es correcto (otra cosa es que sea útil), a diferencia de p.ej. C++ donde este código es incorrecto: compila pero su resultado no está definido por el estándard… en algunos compiladores x puede terminar valiendo 1 y en otros compiladores puede terminar valiendo 2 (el caso de VC++ 9 en debug).