¿Por qué este fragmento muestra la respuesta como 6? [duplicar]

Un compañero mío hizo esta pregunta y quería estar seguro de que le estaba dando la respuesta correcta. Esencialmente, el siguiente código (que de hecho muestra "6" como respuesta) lo confundió cuando llegó a MessageBox.Show((i--).ToString());.

Mi explicación fue que la operación de disminución (i--) en realidad no se lleva a cabo, ya que se pasa al método .Show del objeto MessageBox. Entonces muestra 6 porque en realidad no está reduciendo ese valor en 1.

¿Es esta la explicación correcta? Nunca he intentado lanzar operaciones de aumento/disminución al mismo tiempo que muestro valores al mismo tiempo, por lo que no estoy seguro de si mi razonamiento sobre esto es correcto. ¡Gracias!

        int i = 6;            // I starts as 6...
        if (i >=4 )           // Then the check to see if i >= 4 is TRUE...
        {
            if( i == 5)       // The check to see if i == 5 is FALSE...
            {
                MessageBox.Show(i.ToString()); 
            }
            else
            {
                MessageBox.Show((i--).ToString());  // ****
            }
        }
        else 
        { 
            MessageBox.Show((i++).ToString());
        }

preguntado el 03 de mayo de 12 a las 18:05

4 Respuestas

i-- devuelve el valor de i y devuelve el valor antes del decremento.

Debe leerlo lógicamente en el orden léxico (como fue la intención de los creadores):

puts the value
and then decrements

Si es 6 antes, devuelve 6 (que se imprime) incluso si justo después el valor de i es 5.

Tenga en cuenta que --i decrementa y devuelve el valor decrementado.

Respondido el 10 de Septiembre de 12 a las 07:09

"devuelve el valor de i y luego lo decrementa". esto está mal. La secuencia de operaciones en ambos casos es exactamente lo mismo. La diferencia es qué valor realmente devuelto (incrementado o no) - Tigran

¡Gracias! Tiene sentido ahora. - Ingeniero Salariano

@Tigran Depende de lo que quieras decir con regresar. Este comentario no ayuda a aclarar el problema ya que estaba tratando de dar el significado lógico del operador ^^ - Denys Séguret

En cuanto a cada operación, es importante, cuando profundice, saber cómo se implementa (al menos sepa que no es atómica y no "seguro para subprocesos"). Pero este tipo de detalles profundos es interesante cuando se habla de los detalles del operador, no cuando se analiza el algoritmo de nivel superior. Acepto que tu enlace es muy interesante. Está fuera de tema. - Denys Séguret

i-- devuelve el valor previo al decremento. Si quieres el valor después de decreciendo, quieres --i

contestado el 03 de mayo de 12 a las 18:05

i-- significa disminuir i después de usarlo.

contestado el 03 de mayo de 12 a las 18:05

Esta (variable--) es una sufijo operación de decremento.

Desde msdn:

El resultado de la operación es el valor del operando "antes" de que haya sido decrementado.

Entonces ToString() se aplica en el valor actual (6) de 'i', entonces su valor se reduce.

Consulte también las especificaciones de C#. en MSDN: Operadores de incremento y decremento de sufijo

contestado el 03 de mayo de 12 a las 19:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.