Je me demandais s’il y avait un moyen dans une boucle “pour” d’atsortingbuer une valeur à une variable chaîne nommée d’après son numéro d’index?
Disons que j’ai 3 variables de chaîne appelées:
ssortingng message1 = null; ssortingng message2 = null; ssortingng message3 = null;
Et je veux que la boucle ‘for’ fasse quelque chose comme le code suivant:
for (int i = 1; i <=3; i++) { messagei = "blabla" + i.ToString(); }
Je ne veux pas utiliser un “si” ou un “commutateur” car cela rendra le code plus difficile à suivre.
Y-a-t-il un moyen de faire ça?
Vous ne voulez pas 3 variables avec le même nom, vous voulez un tableau de ces variables.
ssortingng[] messages = new ssortingng[3]; // 3 item array
Vous pouvez ensuite stocker vos éléments dans les éléments du tableau
messages[0] = "Apple"; // array index starts at 0! messages[1] = "Banana"; messages[2] = "Cherry";
Un autre moyen de créer ce tableau consiste à initialiser un tableau en ligne, en enregistrant du code
ssortingng[] messages = { "Apple", "Banana", "Cherry" };
(Remarque: il existe davantage de syntaxes valides pour l’initialisation d’un tableau. Les recherches sur les diverses autres méthodes sont laissées sous forme d’exercice.)
Et y accéder via une boucle (foreach)
foreach (ssortingng fruit in messages) { Console.WriteLine("I'm eating a " + fruit); }
Ou pour
for (int i = 0; i < messages.Length; i++) { Console.WriteLine("I'm eating a " + messages[i]); // reading the value messages[i] = "blabla" + i.ToString(); // writing a value to the array }
pouvez-vous utiliser un tableau? ou type de liste?
ssortingng[] messages = new ssortingng[3]; for (int i = 1; i <=3; i++) { messages[i] = "blabla" + i.ToString(); }
Vous avez dit que vous ne voulez pas avoir d’instruction switch. Je me rends compte que cela a un commutateur, mais si vous devez avoir trois variables différentes, vous pouvez l’encapsuler dans un appel de fonction:
ssortingng message1 = null; ssortingng message2 = null; ssortingng message3 = null; void SetMessage(int i, ssortingng value) { if(i == 1) message1 = value; etc } for (int i = 1; i <=3; i++) { SetMessage(i, "blabla" + i.ToString()); }
Ce n'est pas une solution optimale, mais si vous DEVEZ avoir des variables distinctes, le problème sera masqué.
Vous ne pouvez pas faire ça (enfin, pas sainement). Avez-vous envisagé d’utiliser un tableau de chaînes à la place?
Je pense que vous devriez utiliser un tableau pour ce genre de variables.
ssortingng[] message = new ssortingng[3]; for (int i = 1; i <=3; i++) { message[i] = "blabla" + i.ToString(); }
Généralement, au lieu d’avoir N variables différentes nommées 1, 2, …, N, il suffit de les stocker dans un tableau:
ssortingng message[3]; message[0] = null; message[1] = null; message[2] = null;
et ensuite la boucle:
for (int i = 0; i <=2; i++) { message[i] = "blabla" + i.ToString(); }
Notez que, généralement encore, un ensemble de variables indexées commence par la valeur 0;)
Je le ferais un peu différemment, peut-être utiliser un dictionnaire et stocker vos messages. Quelque chose comme ça:
Dictionary messages = new Dictionary(); for(int i = 1; i <= 3; i++) { messages.Add("message" + i.ToString(), i.ToString()); }
Vous pouvez aussi le faire sans l’index:
ssortingng[] Messages = { "Tom", "Dick", "Harry" }; foreach (Ssortingng Message in Messages) { Response.Write("Hello " + Message + "
"); }
Si vous déclarez votre variable dans une classe en tant que variables publiques, vous pouvez y accéder comme suit:
public partial class _Default : System.Web.UI.Page { public ssortingng message1 = null; public ssortingng message2 = null; public ssortingng message3 = null; public void setVars() { for (int i = 1; i <=3; i++) { this.GetType().GetField("message" + i.ToString()).SetValue(this, "blabla" + i.ToString()); } } }