El droite pour échanger deux variables :
decimal tempDecimal = startAngle;
startAngle = stopAngle;
stopAngle = tempDecimal;
En d'autres termes, utiliser une variable temporaire.
Et voilà. Pas d'astuces, pas de mainteneurs de votre code vous maudissant pour les décennies à venir, pas d'entrées à Le WTF quotidien Il n'est pas nécessaire de passer trop de temps à essayer de comprendre pourquoi vous en aviez besoin dans une seule opération, car, au niveau le plus bas, même la fonction la plus compliquée du langage est une série d'opérations simples.
C'est très simple, lisible et facile à comprendre, t = a; a = b; b = t;
solution.
À mon avis, les développeurs qui essaient d'utiliser des astuces pour, par exemple, "échanger des variables sans utiliser un temp" ou "le dispositif de Duff" essaient juste de montrer à quel point ils sont intelligents (et échouent misérablement).
Je les compare à ceux qui lisent des livres intellectuels dans le seul but de paraître plus intéressants dans les soirées (au lieu d'élargir leurs horizons).
Les solutions où l'on ajoute et soustrait, ou celles basées sur le XOR, sont moins lisibles et très probablement plus lentes qu'une simple solution de "variable temporaire" (arithmétique/opérations booléennes au lieu de simples déplacements au niveau de l'assemblage).
Rendez service à vous-même et aux autres en écrivant un code lisible et de bonne qualité.
C'est mon coup de gueule. Merci de m'avoir écouté :-)
Par ailleurs, je suis conscient que cela ne répond pas à votre question spécifique (et je m'en excuse), mais il existe de nombreux précédents sur SO où des personnes ont demandé comment faire quelque chose et où la réponse correcte était "Ne le faites pas".
36 votes
Cet article de presse en parle : Le gouvernement interdit StackOverflow.com ; un développeur met 6 heures à échanger 2 variables
1 votes
Decimal stopAngle = Convert.ToDecimal(159.9) ; decimal startAngle = Convert.ToDecimal(355.87) ;
1 votes
Je suggère de choisir la réponse fournie par @TimothyP à propos des tuples C# 7 comme nouvelle réponse acceptée. C'est maintenant le moyen le plus pragmatique d'atteindre votre objectif.
0 votes
Jamais convertir un point flottant en décimal. Il doit s'agir d'une chaîne de caractères et non d'un point flottant, par exemple Convert.ToDecimal("159.9").
1 votes
Techniquement, non. Vous pouvez seulement donner l'impression que votre code le fait, mais en dessous, il doit toujours y avoir une troisième variable : Voici pourquoi. Toutes les variables sont une déclaration de type : (Nombre de bits que le type peut contenir) et valeur (La valeur réelle dudit type) si vous avez un bloc de mémoire, avec quelque chose comme un type de 4 bits -> 1000 (1 en décimal) (Variable A) et un autre bloc de mémoire avec quelque chose comme un type de 4 bits -> 0100 (2 en décimal) (Variable B) Lorsque vous voulez stocker A dans B, la valeur de b sera écrasée par A. Il n'y a aucun moyen pour vous de conserver la valeur de B.
0 votes
La SEULE façon de conserver la valeur de B, dans mon texte précédent, est de stocker B, dans une autre valeur. (Temporaire ou non) jusqu'à ce que la valeur précédente de B (sauvegardée dans le troisième bloc de mémoire variable) ait été stockée dans A. Ensuite, vous pouvez libérer la troisième mémoire de valeurs pour autre chose, et vous êtes de retour à deux variables, mais l'échange de valeurs DOIT être fait de cette façon. Quelqu'un dira alors "Et si c'était fait par référence et non par valeur ?". C'est le même problème, la référence à A et la référence à B, doivent être maintenues, alors qu'une référence pointe vers deux valeurs, sinon, vous ne pouvez pas vous reconnecter.