C #: ¿Cómo asigno muchas variables con un entero (i) en el bucle for?

Imagina que tenemos 5 variables de cadena y queremos asignarles “Foo” durante el tiempo de ejecución.

En lugar de esto

string a1 = "Foo"; string a2 = "Foo"; string a3 = "Foo"; string a4 = "Foo"; string a5 = "Foo"; 

¿No podemos usar algo como esto?

 for(int i = 0;i < 5;i++) { a+i = "Foo"; } 

¿Es imposible acceder a ellos de forma similar?

Como han dicho otros, una matriz (u otra colección) es una forma mucho mejor de hacer esto.

Piense en una matriz como una simple colección de variables a las que siempre accede por índice.

No puedo pensar en ninguna razón por la que querría tener un conjunto de variables como se muestra en su pregunta. Si es absolutamente necesario hacerlo, y son variables de instancia / estáticas, puede usar la reflexión para acceder a ellas si realmente lo desea, pero usar una matriz u otra colección sería mucho, mucho mejor.

 Label[] labels = new Label[] { label1, label2, label3, label4, label5 }; for (int i = 0; i < labels.Length; i++) { labels[i].Text = "Foo"; } 

Puede acceder a los controles por nombre, pero sería mucho más fácil agregar una matriz de elementos de tags a su página y luego acceder a la matriz utilizando el número entero.

Puede iterar a través de los controles principales de la etiqueta:

 for (int i=0; i<= parent.controls.count(); i++) { if (parent.controls("label" + i) != null) { ... } } 

HTH

EDITAR:

Después de su edición, la única forma de verlo sería agregarlos a una lista / matriz / diccionario e iterar a través de eso, aunque el principio es el mismo.

Puede crear una matriz o una lista de tags de matriz, y poner su etiqueta en ellas. Entonces puedes hacer algo similar a esto.

Si todas las tags tienen el mismo padre, y ese padre no tiene otros controles de etiqueta dentro de usted, podría hacer lo siguiente:

 foreach (Control lbl in ParentControl) { if (lbl is TextBox) { ((Label)lbl).Text = "Foo"; } } 

Suponiendo que estamos hablando de formularios web, hay un método FindControl () que puede utilizar.

 private void Button1_Click(object sender, EventArgs MyEventArgs) { // Find control on page. TextBox myControl1 = (TextBox) FindControl("Label1"); if(myControl1!=null) { string message = myControl1.Text; } }