J'ai quelques variables à assigner dans une boucle for. Apparemment, lorsque la boucle se termine, C# ignore tout ce qui s'y est passé et les variables retrouvent leur statut d'origine. Plus précisément, j'ai besoin qu'ils soient les derniers et avant-derniers éléments d'une liste. Voici le code:Problème avec les variables locales en C#
int temp1, temp2;
for (int i = 0; i < toReturn.Count; i++) {
if (i == toReturn.Count - 2) { // Next-to-last element
temp1 = toReturn[i];
} else if (i == toReturn.Count - 1) { // Last element
temp2 = toReturn[i];
}
}
// At this point, temp1 and temp2 are treated as uninitialized
Remarque: Ignorez les mauvais noms de variables, ce sont vraiment des variables temporaires. Quelque chose de plus complexe pourrait dérouter les choses.
Maintenant, il y a deux façons (que je connais de) de résoudre ceci: l'une consiste à trouver comment faire vivre les variables après la sortie de la boucle, l'autre est de faire quelque chose comme Python temp = my_list[-1]
pour obtenir le dernier élément d'une liste. Est-ce que l'un d'entre eux est possible en C#?
Éditer: Lorsque j'essaie de compiler, j'obtiens une erreur «utilisation de la variable locale non affectée 'temp1'». Ce code n'est même pas exécuté, il est simplement assis à l'intérieur d'une méthode qui n'est jamais appelée. Si cela aide, j'essaie d'utiliser les variables dans une autre boucle.
Êtes-vous en train de dire que le compilateur avertit que temp1 et t emp2 ne sont pas initialisés? Ou qu'ils doivent être définis mais ne le sont jamais (la valeur observable n'est pas initialisée)? – Michael
En C#, les variables ne retrouvent pas leur état d'origine après une boucle. Ils conserveront la valeur définie dans la boucle tant que la variable n'a pas été créée dans la boucle. –