2017-02-07 2 views
1

Quelqu'un peut-il expliquer pourquoi l'opérateur C# ++ fournit différentes sorties en fonction des variables affectées. https://msdn.microsoft.com/en-us/library/36x43w8w.aspxIncrément de préfixe unaire ++ Opérateur Différentes sorties

int x = 0; 
int y = x++; 
Console.WriteLine($"x: {x}"); 
Console.WriteLine($"y: {y}"); 

/*Prints 
    * x: 1 
    * y: 0 
    */ 

Ma compréhension est y est réglé sur x, qui est (0), puis après la cession de y; x est incrémenté de 1;

int x = 0; 
x = x++; 
Console.WriteLine($"x: {x}"); 

/*Prints 
* x: 0 
*/ 

Pourquoi la même logique ne s'applique pas ici? x doit être réglé sur x, qui est 0 puis après l'incrément d'affectation x par 1 et imprimer 1 au lieu de 0

même pour cet exemple

int x = 0; 
     x += x++; 
     Console.WriteLine($"x: {x}"); 
/*Prints 
* x: 0 
*/ 

Un autre exemple

int x = 0; 
     x += x++ + x++; 
     Console.WriteLine($"x: {x}"); 
     /*Prints 
     * x: 1 
     */ 

Semble qu'il y a une logique différente en arrière-plan que je ne comprends pas.

+0

La description détaillée de la façon dont fonctionne l'opérateur ++ (préfixe et postfixe) en C# est ici: http: // stackoverflow.com/a/3346729/1286670 –

+0

@Steve Je ne sais pas si c'était intentionnel ou non mais vous avez changé _ "Unaire Préfixe Incrément' ++ 'Opérateur" _ à _ "Incrément Préfixe Unaire' + 'Opérateur" _ - non une telle chose – MickyD

+0

Je crois que la réponse d'Eric Lippert trouvée par @ Ňuf couvre toutes les préoccupations de cet article. S'il y a quelque chose qui manque encore - s'il vous plaît [modifier] le message et clarifier quelles parties ont besoin d'une explication séparée. Veuillez vous assurer d'écrire un raisonnement exact étape par étape lorsque vous effectuez une modification - vous devriez avoir au plus quelques étapes supplémentaires en plus de 5 opérations fournies par Eric pour ++ pour couvrir toute l'instruction 'x = x ++'. –

Répondre

-1

Vous avez l'opérateur dans le mauvais sens pour ce que vous essayez de faire.

par la documentation:

L'opérateur d'incrémentation peut apparaître avant ou après son opérande: ++ variable et variables ++

La première forme est une opération d'augmentation de préfixe. Le résultat de l'opération est la valeur de l'opérande après son incrémentation.

La seconde forme est une opération d'incrément de suffixe. Le résultat de l'opération est la valeur de l'opérande avant qu'elle ait été incrémentée.

Donc, dans votre exemple de code, vous définissez y-xavantx est incrémenté. Si vous souhaitez mettre y à la nouvelle valeur de x vous devez utiliser l'opération d'incrémentation de préfixe pour incrémenter x et avoir le résultat soit la nouvelle valeur à faire avec comme vous le souhaitez:

int x = 0; 
int y = ++x; 
Console.WriteLine($"x: {x}"); 
Console.WriteLine($"y: {y}"); 
/*Prints 
    * x: 1 
    * y: 1 
*/ 
+1

Je pense que ce que OP obtient à, c'est qu'il a lu le code comme int x = 0; x ++; x + = 0; 'qui serait égal à 1. –

2
int x = 0; 
x = x++; 

première implantation - stocker la valeur initiale de x (0), deuxième opération - augmenter x (1), troisième opération - attribuer une valeur stockée à x (0)

int x = 0; 
x += x++; 

Dans ce cas, le premier opérande d'addition "gelé" avant l'incrément (0), le deuxième opérande "figé" avant l'incrémentation (0). Comme résultat 0 + 0 = 0