Variables dans une boucle

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()); } } }