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).
 
